Euphoria - 短路的评估



当条件由 if、elsif、untilwhile 使用andor 运算符进行测试时,将使用短路评估。例如 −

if a < 0 and b > 0 then
   -- block of code
end if

如果 a < 0 为假,那么 Euphoria 不会费心去测试 b 是否大于 0。它知道无论如何总体结果都是假的。同样 −

if a < 0 or b > 0 then
   -- block of code
end if

如果 a < 0 为真,那么 Euphoria 立即决定结果为真,而不会测试 b 的值,因为此测试的结果无关紧要。

一般来说,每当你遇到以下形式的条件时 −

A and B

其中 A 和 B 可以是任意两个表达式,当 A 为假时,Euphoria 会采取捷径,并且立即使总体结果为假,甚至不考虑表达式 B。

同样地,每当遇到以下形式的条件时 −

A or  B

其中 A 为真,Euphoria 会跳过对表达式 B 的评估,并将结果声明为真。

并且和或的短路评估仅用于 if、elsif、until 和 while 条件。它在其他情况下不使用。例如 −

x = 1 or {1,2,3,4,5} -- x should be set to {1,1,1,1,1}

如果在这里使用短路,则会将 x 设置为 1,甚至都不会查看 {1,2,3,4,5},这是错误的。

因此,短路可以在 if、elsif、until 或 while 条件中使用,因为你只需要关心结果是真还是假,并且条件需要产生原子作为结果。

广告