2012-06-11 7 views
5

निम्नलिखित स्केला कोड को देखते हुए:स्कैला शॉर्ट और बाइट प्रकारों के लिए "+ =" ऑपरेटर को परिभाषित क्यों करता है?

var short: Short = 0 
short += 1  // error: type mismatch 
short += short // error: type mismatch 
short += 1.toByte // error: type mismatch 

मैं अंतर्निहित टाइपिंग पूछताछ नहीं है - यह स्पष्ट है कि "लघु + मूल्य == इंट" है।

मेरे प्रश्न हैं:
1. क्या ऑपरेटर का उपयोग किया जा सकता है?
2. यदि नहीं, तो क्यों ऑपरेटर कम & बाइट पर उपयोग के लिए उपलब्ध है?

[और विस्तार के द्वारा * =, | = & = आदि]

+0

दरअसल, लघु विधि "+ =" या "* =" लघु http://www.scala-lang.org/api/current/index.html#scala के लिए दस्तावेज़, आप देख सकते हैं नहीं है। कम । x someoperator = y स्वचालित रूप से कंपाइलर द्वारा x = x someoperator y में अनुवाद कर रहे हैं। – Eastsun

+0

@Eastsun लेकिन न करता इंट :-) 'एक सेशन = b' विस्तृत रूप के लिए वाक्यात्मक चीनी है:' एक = एक सेशन b', जो प्रकार की त्रुटि बताते हैं (लघु + लघु -> इंट)। यह समझा नहीं गया कि निर्णय क्यों बनाया गया था या इस निर्माण का क्या उपयोग हो सकता है - या शायद नहीं। (सी # में यह 'करने के लिए पूरी तरह से कानूनी है बाइट + = 1' नहीं बल्कि' बाइट = बाइट + 1', और व्यवहार मानक में विशिष्ट है - वहाँ एक अंतर्निहित डाली वापस एलएचएस प्रकार के सी # में है)। –

+0

@pst हाँ, आप जावा में एक ही बात सी # में के रूप में (। अगर मैं सही ढंग से याद) – Eastsun

उत्तर

1

समस्या हो कि "+ (शॉर्ट)" लघु वर्ग पर परिभाषित किया गया है लगता है के रूप में:

def +(x: Short): Int 

तो यह हमेशा एक इंट देता है।

को देखते हुए यह आप आ सकती है क्योंकि + आपरेशन एक इंट जो (जाहिर है) desugared संस्करण में "लघु" वर करने के लिए आवंटित नहीं किया जा सकता का मूल्यांकन + = "ऑपरेटर" उपयोग करने में सक्षम नहीं किया जा रहा:

x K= y 

और अगर एक्स एक वर है और कश्मीर किसी भी प्रतीकात्मक ऑपरेटर है और वहाँ एक्स में कश्मीर विधि है:

short = short + short 

अपने दूसरे प्रश्न का सवाल है, यह "उपलब्ध" क्योंकि जब स्केला संकलक की तरह भाव पाता है तो संकलक अनुवाद करता है या इसे "desugar":

x = x K y 

और फिर उसके साथ संकलन जारी रखने का प्रयास करता है।

संबंधित मुद्दे

 संबंधित मुद्दे