स्कैला आप जिस हुक के बारे में बात कर रहे हैं उसके बजाय बंद होने के उपयोग को प्रोत्साहित करने के लिए प्रेरित करता है (जिनमें से अधिकांश स्थिर टाइपिंग और संकलन के कारण आसानी से कार्यान्वित नहीं कर सकते हैं)।
इसके लिए आपको पहले से ही पता होना चाहिए कि आम व्यवहार में लचीलापन वांछित हो सकता है, लेकिन यह उपलब्ध होने पर बहुत शक्तिशाली और उपयोग करने में आसान है। उदाहरण के लिए, यदि आप एक विधि है कि लोगों के नाम बाहर प्रिंट है लगता है:
case class Name(first: String, last: String) {
def title = last + ", " + first(0).toUpper + "."
}
trait Familiar extends Name {
override def title = first + " " + last(0).toUpper + "."
}
def listing(names: Array[Name]) = names.foreach(name => println(name.title))
val jd1 = new Name("John","Doe)
listing(Array(jd1)) // Prints Doe, J.
val jd2 = new Name("John","Doe") with Familiar
listing(Array(jd2)) // Prints John D.
लेकिन अगर आप वास्तव में एक बहुत मुद्रण नाम बदलते करने जा रहे हैं, तो आप बेहतर निर्माण कर रहे हैं कि में:
case class Name(first: String, last: String) {
def title = last + ", " + first(0).toUpper + "."
}
def listing(names: Array[Name], address: Name => String = _.title) =
names.map(address).foreach(println)
val jd = new Name("John", "Doe")
listing(Array(jd)) // Uses default, so prints Doe, J.
listing(Array(jd), n => n.first + " " + n.last(0).toUpper + ".") // Prints John D.
स्रोत
2011-03-09 14:54:38
संबंधित नोट पर, http://stackoverflow.com/questions/3105594/is-there-a-method-missing-in-scala भी देखें – VonC