md/lambda-preprocessor

安装: 8

依赖项: 0

建议者: 0

安全: 0

星标: 4

关注者: 1

分支: 0

开放问题: 0

语言:Python

类型:预宏

0.1.0 2017-07-15 19:00 UTC

This package is not auto-updated.

Last update: 2024-09-10 16:42:39 UTC


README

Hacklang中,lambda 表达式是通过使用 lambda 箭头 ==> 表示的。箭头的左侧是匿名函数的参数,右侧是表达式或语句列表。

此预处理器旨在使这种语法在本地 PHP 应用程序中可用。这不会在运行时发生,因此不会影响性能。预处理器在pre 插件和yay 宏库之上工作。

语法上,由于 Yay 尚未具有表达式解析器,尽管 Hack 支持不使用花括号的单个表达式,但此预处理器始终需要编写花括号。希望 Yay 的发展将改变这一点。

单行匿名函数

最简单的例子是返回它最初给出的参数的匿名函数。在 PHP 中可以写成

$id = function($x) { return $x };

使用此预处理器可以写成更简单

$id = $x ==> { $x };

如果我们需要声明类型提示或传递多个参数,我们则需要使用括号。我们也可以在上面的示例中使用括号,但对于没有类型提示的单个参数来说是可选的。

$addNumbers = ($x, $y) ==> { $x + $y };

这可以翻译成

$addNumbers = function ($x, $y) { return $x + $y };

或者带有类型提示

$addNumbers = (int $x, int $y): int ==> { $x + $y };

这可以翻译成

$addNumbers = function (int $x, int $y): int { return $x + $y };

多行匿名函数

对于具有多行的匿名函数,参数、类型提示和返回类型的规则仍然适用。唯一的区别是您需要在块的最后一句话中写出 return 关键字,并且现在您必须在每个语句的末尾加上分号。

$increment = $x ==> {
    $y = $x + 1;
    return $y;
};

这可以翻译成

$increment = function($x) {
    $y = $x + 1;
    return $y;
};

闭包

PHP 提供了 use 关键字来捕获封闭作用域中的变量。Hack 的 lambda 使得这一点更加容易。您可以在 lambda 中隐式使用变量。当您使用此预处理器时,这将是可用的。

function addLastname(array $names, string $lastname): array
{
    return array_map($name ==> { $name . " " . $lastname }, $names);
}

请注意,为了使用 $lastname 与官方语法,您必须使用如以下所示的 use 关键字

function addLastname(array $names, string $lastname): array
{
    return array_map(function($name) use ($lastname) { return $name . " " . $lastname }, $names);
}

递归调用和优先级

预处理器将首先翻译内部块,然后是外部块。与此语法相比,优先级更为明显。在 Hack 中,您可以省略花括号 {}。在这里,很明显表达式

$lambda = $x ==> { $y ==> { $x + $y }; };

将被翻译成

$lambda = function($x) { return function($y) { return $x + $y; }; };

总结

  • 此预处理器是 alpha 软件。请勿在生产环境中使用。