में टिल्ड ऑपरेटर ~ स्कैला के इस बिट में क्या करता है?स्कैला
उदाहरण के लिए:
scala> val apple = 1
apple: Int = 1
scala> ~apple
res0: Int = -2
क्या है कि कीड़ा मेरे सेब लिए क्या किया?
में टिल्ड ऑपरेटर ~ स्कैला के इस बिट में क्या करता है?स्कैला
उदाहरण के लिए:
scala> val apple = 1
apple: Int = 1
scala> ~apple
res0: Int = -2
क्या है कि कीड़ा मेरे सेब लिए क्या किया?
सबसे पहले, कुछ मेटा-सलाह। जब भी आप सोच रहे हों कि कंपाइलर कुछ वाक्य रचनात्मक चीनी कैसे फैलाता है, एक प्रकार का अनुमान लगाता है, या एक अंतर्निहित रूपांतरण लागू करता है, तो आपको यह दिखाने के लिए scala -Xprint:typer -e <expr>
का उपयोग करें।
scala -Xprint:typer -e "val a = 2; ~a"
...
private[this] val a: Int = 2;
private <stable> <accessor> def a: Int = $anon.this.a;
$anon.this.a.unary_~
ठीक है, एक उपसर्ग ~
unary_~
का एक नियमित विधि मंगलाचरण के लिए विस्तार किया गया है।
:
6.12.1 पूर्व fi x संचालन
एक पूर्व fi x आपरेशन सेशन ई एक पूर्व fi x ऑपरेटर सेशन है, जो पहचान फाई ईआरएस में से एक
+
,-
,!
या होना चाहिए होते हैं~
। अभिव्यक्तिop e
पोस्ट फाई विधि विधिe.unary_op
के बराबर है।प्री-फाई ऑपरेटरों में सामान्य फ़ंक्शन अनुप्रयोगों से अलग हैं कि उनके ऑपरेंड अभिव्यक्ति परमाणु नहीं होना चाहिए। उदाहरण के लिए, इनपुट अनुक्रम
-sin(x)
-(sin(x))
के रूप में पढ़ा जाता है, जबकि फ़ंक्शन एप्लिकेशन नकारात्मकsin(x)
को के अनुप्रयोग के रूप में पार्स किया गया है, जो एक्स ऑपरेटर पाप में ऑपरेटरों को नकारात्मक और (x) के पाप के रूप में पार्स किया जाएगा।
इसका मतलब है कि उपसर्ग ऑपरेटरों प्रकार में बनाया करने के लिए ही सीमित नहीं हैं, वे अपने स्वयं के प्रकार पर इस्तेमाल किया जा सकता है (हालांकि यह इस शक्ति के साथ पागल जाने के लिए एक अच्छा विचार नहीं है!)
scala> object foo { def unary_~ = "!!!" }
defined module foo
scala> ~foo
res0: java.lang.String = !!!
तो, आपका प्रश्न क्या है? आप methods starting with u
के लिए मानक लाइब्रेरी के लिए ScalaDoc की अनुक्रमणिका को चेकआउट कर सकते हैं। nightly ScalaDoc ने हाल ही में इस विधि के लिए दस्तावेज जोड़ा है।
the bitwise negation of this value
Example:
~5 == -6
// in binary: ~00000101 ==
// 11111010
स्पष्टीकरण और संदर्भ के लिए धन्यवाद। – Jack
~
पूर्णांक पर लागू होने पर bitwise नहीं ऑपरेटर है। हेक्स में देखना सबसे आसान है:
scala> "%x".format(~0x7F)
res0: String = ffffff80
+1 टूट गया है इस बात की पुष्टि यह बिटवाइज़ ऑपरेटर नहीं है के लिए। जब आपने उत्तर दिया तो मैं बाइनरी स्ट्रिंग को प्रिंट करने के साथ चारों ओर झुका रहा था। क्षमा करें कि मैं केवल एक जवाब स्वीकार कर सकता हूं। – Jack
"सबसे आसान" व्यक्तिपरक हो सकता है ... – FracturedRetina
Scalex, स्केला के लिए hoogle की तरह: http://scalex.org/?q=~ –
@GeneT लिंक – sjking