मैं एक खेल के मैदान में परीक्षण (शिक्षा) प्रयोजनों के लिए इस कोड लिखा है:डिफ़ॉल्ट पैरामीटर के साथ और बिना घोषित कॉलिंग फ़ंक्शन अलग-अलग परिणाम देता है?
import Cocoa
func DoIt(a: Int, b: Int, c :Int = 0) -> Int {
return a + b + c;
}
func DoIt(a: Int, b: Int, c :NSObject) -> Int {
return a * b * c.description.lengthOfBytesUsingEncoding(NSUTF8StringEncoding);
}
और मैं यह मिल गया है जब मैं इसका इस्तेमाल किया:
DoIt(4, 5, 6); // result: 20
var obj = NSObject(); // result: NSObject
DoIt(4, 5, obj); // result: 520
मैं पहली बार समारोह DoIt(Int, Int, Int)
कहा जाता है की उम्मीद जब DoIt(4, 5, 6);
कर लेकिन जाहिर है दूसरे को बुलाया जा रहा है। 6
कहां गया? ऐसा लगता है कि 6
को NSObject
में स्पष्ट रूप से परिवर्तित किया गया था, उद्देश्य-सी में जो कम से कम एक चेतावनी उत्पन्न करेगा।
यह क्यों है?
उत्सुकता से अगर मैं अंतिम c: Int
आवश्यक (= 0
को हटाकर) तो यह अपेक्षा के अनुसार काम करता है।
DoIt(4, 5, 6); // result: 15
var obj = NSObject(); // result: NSObject
DoIt(4, 5, obj); // result: 520
Edit1: जोड़ा गया आईआर
मामले में यह समझने के लिए मैं निम्न आदेश जारी किए गए और परिणाम सार कड़ी में है क्या चल रहा है में मदद करता है: https://gist.github.com/nacho4d/94fdb72d8a3fee0c09e5
$ swiftc \
-emit-ir /Users/nacho4d/Desktop/function2/function2/main.swift \
-sdk Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk
नहीं है रेडडिट पर एक धागा, शायद यह मदद करता है: [क्यों स्विफ्ट कंपाइलर एनएसएनंबर के लिए इंटीग्रेटर्स और अन्य प्राइमेटिव्स को परिवर्तित करता है] (http://www.reddit.com/r/swift/comments/2em7ic/why_swift_compiler_convert_implicitly_integers/) –
मुझे नहीं पता यह इस काम क्यों करता है अरे, लेकिन मुझे विश्वास नहीं है कि यह इरादा व्यवहार है। अगर यह है तो यह मेरे लिए बहुत अजीब लगेगा। – Dair
धन्यवाद @ सेबेस्टियन ड्रेस्लर मैं बस उस धागे को पढ़ता हूं। मैं निहित मुक्केबाजी (NSNumber के लिए आदिम) और इसके विपरीत अनबॉक्सिंग को समझता हूं। लेकिन मुझे यकीन नहीं है कि यह मामला यहां है। यह अभी भी अस्पष्ट है – nacho4d