我怎样才能简化if语句
!(!a || b)?
为什么它实际上可能?
UPD:
抱歉.不优化,但简化:)
假设,我有一个简单的方法:
public int add(int a, int b) {
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
如果我用max int值运行它
add(2147483647, 2147483647);
Run Code Online (Sandbox Code Playgroud)
我得到-2.我发现如果我们溢出int然后我们去min integer value(-2147483648)并继续添加.
我们来做一些数学.如果我添加2147483647 + 2147483647我应该得-1,因为
-2147483648 + 2147483647 = -1
Run Code Online (Sandbox Code Playgroud)
那我为什么要这样-2?
我equals为课写了一个方法A.
class A(x: Int, s: String) {
override def equals(that: Any) = that match {
case a: A => this.x == a.x && this.s == a.s
case _ => false
}
}
Run Code Online (Sandbox Code Playgroud)
这是对的吗?
这是我的发现.我发现在Scala我可以简单地写下这样的表达式:
val n: Int = (((2: Int): Int): Int): Int
Run Code Online (Sandbox Code Playgroud)
它将100%有效.但我不知道为什么Scala创作者会这样做?这个语义有什么意义?有这种奇怪的原因吗?
PS
我可以假设这种方法用于type inference帮助编译器弄清楚发生了什么.或者也许还有其他一些案例?