我对Solidity的操作顺序有疑问。在文档中,它表示逻辑NOT操作优先于逻辑AND操作。问题是,当我有一个类似if(false && !function())
的{{1}}语句时,由于操作的顺序,我认为首先调用该函数,但实际上&&
运算符的短路先完成。所以我的问题是:为什么?
答案 0 :(得分:0)
这是因为两个运营商(str, bytes, int,)
和||
应用了常见的短路规则,如Solidity document中所述:
运营商||和&&应用常见的短路规则。这个 表示在表达式f(x)||中g(y),如果f(x)的计算结果为真, g(y)即使可能有副作用也不会被评估。
由于常见的短路规则,此处描述的行为与许多其他语言完全相同,例如Java或Scala。这是一个Scala REPL演示:
&&