Scala的這一點在做什麼?Scala中的波形符號運算符
例如:
scala> val apple = 1
apple: Int = 1
scala> ~apple
res0: Int = -2
什麼是蠕蟲做我的蘋果嗎?
Scala的這一點在做什麼?Scala中的波形符號運算符
例如:
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預音響X操作
預音響X操作運算Ë由一個前置音響X操作符op,這必須是identi音響ERS之一
+
,-
,!
或~
。 表達式op e
相當於post-fi方法應用程序e.unary_op
。前綴運算符與 中的普通函數應用程序不同,它們的操作數表達式不必是原子的。例如, 輸入序列
-sin(x)
被讀取爲-(sin(x))
,而函數 應用否定sin(x)
將被解析爲在操作符sin中對應於操作數negate和(x)的 。
這意味着,前綴運營商並不侷限於內建類型,他們可以在自己的類型可以使用(雖然這不是一個好主意,瘋狂地使用這種權力!)
scala> object foo { def unary_~ = "!!!" }
defined module foo
scala> ~foo
res0: java.lang.String = !!!
那麼,你的問題是什麼?您可以檢出標準庫的ScalaDoc的索引methods starting with u
。 nightly ScalaDoc最近爲此方法添加了一些文檔。
the bitwise negation of this value
Example:
~5 == -6
// in binary: ~00000101 ==
// 11111010
感謝您的解釋和參考。 – Jack 2012-02-25 08:48:40
~
是應用於整數時的按位不是運算符。在十六進制中最容易看到:
scala> "%x".format(~0x7F)
res0: String = ffffff80
+1確認它是按位不是運營商。當你回答時,我正在擺弄打印二進制字符串。道歉,我只能接受一個答案。 – Jack 2012-02-25 08:47:21
「最簡單」可能是主觀... – FracturedRetina 2014-06-30 22:06:09
的ScaleX,像hoogle斯卡拉:http://scalex.org/?q=~ – 2012-02-25 15:29:07
@GeneT鏈路斷開時 – sjking 2016-11-28 19:10:51