यह मेरी परियोजना में प्रकार की सुरक्षा का एक परेशानीपूर्ण उल्लंघन है, इसलिए मैं इसे अक्षम करने का एक तरीका ढूंढ रहा हूं। ऐसा लगता है कि यदि कोई फ़ंक्शन एनीरफ (या java.lang.Object) लेता है, तो आप फ़ंक्शन को पैरामीटर के किसी भी संयोजन के साथ कॉल कर सकते हैं, और स्कैला पैरामीटर को टुपल ऑब्जेक्ट में जोड़ देगा और फ़ंक्शन का आह्वान करेगा।स्कैला एकाधिक फ़ंक्शन कॉल पैरामीटर को टुपल में जोड़ता है - क्या इसे अक्षम किया जा सकता है?
मेरे मामले में फ़ंक्शन टुपल की अपेक्षा नहीं कर रहा है, और रनटाइम पर विफल रहता है। मैं उम्मीद करता हूं कि संकलन समय पर इस स्थिति को पकड़ा जाएगा।
object WhyTuple {
def main(args: Array[String]): Unit = {
fooIt("foo", "bar")
}
def fooIt(o: AnyRef) {
println(o.toString)
}
}
आउटपुट:
(foo,bar)
ठीक है अगर कोई फ़ंक्शन किसी तर्क के रूप में 'AnyRef' लेता है, तो यह तर्क है कि तर्क कुछ भी हो, नहीं? मेरा मतलब है कि स्कैला स्वचालित रूप से तर्कों को एक टुपल में पैक नहीं करता है, फिर भी आप स्पष्ट रूप से एक ट्यूपल पास कर पाएंगे, जो निश्चित रूप से पूरी तरह से टाइप-सुरक्षित है क्योंकि आपका फ़ंक्शन कुछ भी लेता है और टुपल्स कुछ भी होता है। यदि आपका फ़ंक्शन केवल कुछ प्रकार के तर्कों को संभाल सकता है तो इसे या तो इन प्रकार के तर्कों को लेने या तर्कसंगत रूप से तर्क प्रकार की जांच करने के लिए घोषित किया जाना चाहिए। – sepp2k
तो यह क्या उम्मीद करता है? आपको इसे विभिन्न विशेषज्ञों में तोड़ना पड़ सकता है। बेशक, अगर आप टुपल के अलावा कुछ भी उम्मीद कर रहे हैं, तो इससे कोई मदद नहीं होगी। – sblundy
पर्याप्त मेला ... लेकिन आम तौर पर अनुबंध (अन्य प्रोग्रामिंग भाषाओं में) यदि कोई फ़ंक्शन 1 पैरामीटर की अपेक्षा करता है और 2 के साथ कॉल किया जाता है, तो संकलन विफल हो जाएगा। –