【发布时间】:2015-10-22 07:21:42
【问题描述】:
我有一个 FO 程序在接近这一行时抛出错误:
.continue ERR1 ? F|defined(M|yhnum) & M|yhnum > 10
错误是
M|yhnum: 未找到
为什么会这样?我认为如果我在访问变量之前检查变量是否已定义就不会发生,但它似乎不起作用
【问题讨论】:
我有一个 FO 程序在接近这一行时抛出错误:
.continue ERR1 ? F|defined(M|yhnum) & M|yhnum > 10
错误是
M|yhnum: 未找到
为什么会这样?我认为如果我在访问变量之前检查变量是否已定义就不会发生,但它似乎不起作用
【问题讨论】:
这里的问题是,FO 不使用短路评估。这意味着它总是会检查M|yhnum 是否大于 10,即使它没有被定义。显然,如果没有定义,这将失败。
来自文档:
这意味着即使从中间结果中已经可以看到最终结果,布尔表达式也将被完全计算。这对于 defined() 来说很重要。
使用F|condexpr手动实现短路评估
.continue ERR1 ? F|condexpr(F|defined(M|yhnum), M|yhnum > 10, G|false)
【讨论】: