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
4

1 回答 1

9

从概念上讲,$foo就像一个具有 2 个输入 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
于 2014-04-09T17:45:40.427 回答