跳转到内容

Sway 参考手册/惰性求值

来自维基教科书,开放的书籍,开放的世界

许多函数式语言都具有延迟(或惰性)求值函数参数的功能。与应用顺序求值(C 和 Java 使用)不同,函数参数在绑定到形式参数之前进行求值,而惰性求值会延迟求值,直到实际需要这些值。这是通过将参数作为thunk传递来实现的,thunk 是一种数据结构,其中包含形成参数的实际表达式以及在应用顺序下参数将被求值的上下文。

Sway 允许程序员决定是否使用惰性求值。为了表示惰性求值,形式参数的名称以美元符号 ($) 开头。当需要参数的实际值时,将使用 force 函数来在 thunk 中求值参数表达式。以下是一个示例

function f($x)
        {
        println("about to force...");
        force($x);
        }
    f(println("hello"));

执行此代码时,我们将得到以下输出

    about to force...
    hello

将其与以下代码的输出进行对比,在该代码中,形式参数的名称是正常的

function f(x)
        {
        println("about to force...");
        force(x);
        }
    f(println("hello"));

执行此新代码时,我们将得到以下输出

hello
    about to force...

这是因为 println 必须在将其结果绑定到形式参数x之前进行求值。


异常 · 可变参数函数

华夏公益教科书