2017-03-21 2 views
1

私はSolidityの操作順序に関する質問があります。ドキュメントでは、論理NOT演算が論理AND演算より優先されることを示しています。問題は、私がifのようなステートメントを持っているときです。if(false && !function())私は操作の順序のために関数が最初に呼び出されたと考えましたが、実際には&&演算子の短絡が最初に行われます。だから私の質問は:なぜですか?保全指揮命令 - 論理NOT

答えて

0

Solidity documentで説明したように、2つの演算子||&&は、一般的な短絡ルールを適用するので、それはです:

演算子|| & &は、共通の短絡規則を適用します。この は、式f(x)|| g(y)、f(x)がtrueと評価された場合、副作用があっても 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