मैं स्कैला (स्कैला कोड धावक संस्करण 2.7.7.final) में नया हूं, और मुझे वास्तव में समझ में नहीं आता कि कॉलर की आवश्यकता क्यों है पैरामीटर प्रकार प्रदान करने के लिए जब हम उच्च ऑर्डर फ़ंक्शंस का उपयोग कर रहे हों।स्कैला जेनेरिक फ़ंक्शन मान (बेनामी फ़ंक्शन) - गुम पैरामीटर प्रकार (त्रुटि)
नमूने में नीचे, मैं एक योग्य स्वतंत्र वस्तु (Util
) एक समारोह है कि है। लेकिन Main
ब्लॉक में, फोन करने वाले गुमनाम कार्य करने के लिए पैरामीटर प्रकार से गुजरना होगा।
क्यों स्काला Array
प्रकार (अर्थात String
) से समारोह के प्रकार के अनुमान नहीं करता है? क्या उसे करने का कोई तरीका है ?
object Util {
// Just for fun! Suppose that the arrayOne and arrayTwo are all the same length.
// will swap the elements from arrayOne to ArrayTwo.
def swap[T](arrayOne:Array[T], arrayTwo:Array[T] , f:(T,T) =>(T,T)) {
for(i <- 0 until (arrayOne.length min arrayTwo.length)){
val (left, right) = f(arrayOne(i),arrayTwo(i))
arrayOne(i) = left
arrayTwo(i) = right
}
}
}
object Main extends Application {
val arrayOne = Array("A","B","C")
val arrayTwo = Array("D","E","F")
//If not specified the type String,the compiler throws "Missing Parameter Type" error
Util swap(arrayOne, arrayTwo,(elem1:String,elem2:String)=>(elem2,elem1))
}
वर्क्स केवल एक} util वस्तु में याद आ रही है। –
@Thomas यह काम करता है, क्योंकि वह समारोह में प्रकार निर्दिष्ट। :-) –
@Daniel प्रकार एनोटेशन आखिरी बात है कि मुझे इस कोड के साथ परेशान है। मुझे आश्चर्य है कि इसे ठीक करने के लिए अशिष्ट होगा। आखिरी पंक्ति पर ध्यान खो दिया। –