HACK Lambda示例--是什么?

6

你能解释一下这是如何工作的吗?

http://docs.hhvm.com/manual/en/hack.lambda.php

变量会自动和传递地被捕获(包括 $this):

<?hh
$z = 11;
$foo = $x ==> $y ==> $x * $z + $y;
$bar = $foo(5);
var_dump($bar(4)); // outputs 59
1个回答

9
从概念上讲,$foo 就像一个带有两个输入 x 和 y 的函数。调用 $foo 就像是对部分函数进行求值,将 x 设为 5。然后,$bar 调用会使用 y=4 来评估该函数。因此,你最终得到的结果是 x * z + y = 5 * 11 + 4 = 59。
换句话说,$foo 是一个求值为另一个 lambda 表达式的 lambda 表达式。因此,$bar 变成了一个求值为数字的 lambda 表达式。
$z = 11

$foo = $x ==> $y ==> $x * $z + $y;
// foo = f(x,y,z) = x * z + y

$bar = $foo(5);                 // $bar is now $y ==> 5 * $z + $y
// bar = f(y,z) = 5 * z + y

$result = $bar(4);              // this gives you 5 * $z + 4 = 59
// result = f(z) = 5 * z + 4

var_dump(result);               // outputs 59

$foo(5)被赋值给$bar之前是否已经被计算?因此,在这行代码中:$bar = $foo(5),$bar变成了什么? - Bob Brunius
@BobBrunius 是的,它被评估了 -- 但它会被评估为另一个 lambda。 - McGarnagle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接