【问题标题】:Solidity Order of Operations - Logical NOTSolidity 操作顺序 - 逻辑非
【发布时间】:2017-08-12 18:57:42
【问题描述】:

我对 Solidity 中的操作顺序有疑问。在文档中,它说逻辑 NOT 操作优先于逻辑 AND 操作。问题是,当我有一个像 if(false && !function()) 这样的 if 语句时,我认为由于操作顺序而首先调用该函数,但实际上首先完成了 && 运算符的短路。所以我的问题是:为什么?

【问题讨论】:

    标签: operator-precedence solidity


    【解决方案1】:

    这是因为||&& 这两个运算符应用了常见的短路规则,如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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 2014-08-18
      • 2013-11-08
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多