सीधे नहीं; स्कैला में ऐसा करने का सामान्य तरीका एक टाइपक्लास के साथ है।
trait FAble[T] { def doF: String }
object FAble {
implicit val fInt = new FAble[Int] { def doF = "I'm an int" }
implicit val fFloat = new FAble[Float] { def doF = "I'm a float" }
implicit val fBurger = new FAble[Burger] { def doF = "You want fries?" }
}
def f[T](implicit ev: FAble[T]) = ev.doF
// or
def f[T: FAble] = implicitly[FAble[T]].doF
यह एक निष्पक्ष थोड़ा और अधिक वर्बोज़ है, लेकिन यह कुछ फायदे भी है - अंतर्निहित उदाहरणों (val
रों बजाय implicit def
s का उपयोग करके) गणना की जा सकती है, और वहाँ किसी भी प्रकार के लिए एक से अधिक उदाहरण हो सकता है , जो आपको कोड के विभिन्न बिंदुओं पर दायरे में अलग-अलग उदाहरणों के साथ व्यवहार का चयन करने देता है।
कारण यह नहीं है कि आप इसे C++ तरीके से नहीं कर सकते हैं कि स्कैला जेनेरिक में विभिन्न प्रकार-पैरामीटर (@specialized
एक तरफ कोड कोड शामिल नहीं है, क्योंकि यह वही नहीं करता है जो आप चाहते हैं)। इसलिए यह कहना समझ में नहीं आता है कि "हे कंपाइलर, जब आप जेनेरिक टेम्पलेट से कोड उत्पन्न करने के बजाय उस स्थिति में एक इंट देखते हैं, तो इसके बजाय इस विशिष्ट कोड का उपयोग करें"।
स्रोत
2012-07-27 02:21:23