延迟参数求值
通常,当调用函数时,DScript 在进入函数之前对输入参数求值。例如,在表达式中:
DScript 首先对表达式 2+3 求值得到 5,然后对表达式 f(5) 求值。假设想要延迟对参数的求值,让函数 f 决定是否以及何时对表达式求值。例如,假设想要构建一个行为类似 IF 原语的函数。IF 具有以下格式:
参见关于 If 语句。
根据 conditional 的值,对 trueexpression 或 falseexpression 求值。但在任何情况下都不会对两个表达式都求值。
可以通过如下定义来正确获取函数的返回值:
但是,此定义的问题在于所有输入参数在进入函数 IF 之前都会被求值。因此,也会产生对 a 和 b 都求值的副作用。例如,
会同时显示 True 和 False。
要使输入参数的求值延迟,请在参数声明前加上 & 符号(@),如下所示:
现在传递给函数的是指向参数表达式的指针。这使得参数仅在函数体内被求值时才进行求值。