2017-03-21 12 views
1

고소 작업의 순서와 관련하여 질문이 있습니다. 문서에서는 논리적 NOT 연산이 논리적 AND 연산보다 우선 순위가 높음을 나타냅니다. 문제는 내가 if 같은 진술을했을 때 if(false && !function()) 나는이 함수가 먼저 연산 순서 때문에 호출되었다고 생각했지만 실제로는 && 연산자의 단락이 먼저 이루어진다. 그래서 내 질문은 : 왜?고소 작업 순서 - 논리적 NOT

답변

0

Solidity document에 설명 된대로 두 사업자 ||&&가 공통 단락 규칙을 적용 때문입니다 :

연산자를 || & &은 공통적 인 단락 규칙을 적용합니다. 이 은 f (x) || g (y), f (x)가 참으로 평가되면 부작용이 있더라도 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