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