我对 Solidity 中的操作顺序有疑问。在文档中,它说逻辑 NOT 操作优先于逻辑 AND 操作。问题是,当我有这样的if
语句时,if(false && !function())
我认为由于操作顺序而首先调用该函数,但实际上首先完成了运算符的短路&&
。所以我的问题是:为什么?
问问题
418 次
1 回答
0
这是因为这两个运算符||
应用&&
了通用的短路规则,如Solidity 文档中所述:
运营商 || && 应用常见的短路规则。这意味着在表达式 f(x) || g(y),如果 f(x) 计算结果为真,即使 g(y) 可能有副作用,也不会计算 g(y)。
由于常见的短路规则,此处描述的行为与许多其他语言(例如 Java 或 Scala)完全相同。这是一个 Scala REPL 演示:
scala> def foo(x: Int): Boolean = { if (x >= 0) true else ??? }
foo: (x: Int)Boolean
scala> foo(10)
res0: Boolean = true
scala> foo(-10)
scala.NotImplementedError: an implementation is missing
at scala.Predef$.$qmark$qmark$qmark(Predef.scala:230)
at .foo(<console>:11)
... 32 elided
scala> if (false && !foo(-10)) "boo" else "bar"
res2: String = bar
于 2017-03-23T05:11:21.193 回答