simones/lambda

该软件包最新版本(dev-master)没有可用的许可证信息。

从定义字符串创建闭包。

dev-master 2016-08-28 16:23 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:36:47 UTC


README

从定义字符串创建闭包。

安装

composer require simones/lambda

如何使用

您可以通过将定义字符串传递给 Lambda 构造函数或 Lambda::make 来生成闭包:它们将返回一个 Lambda 实例,您可以直接调用(它实现了 __invoke 魔术方法)或通过 call 方法调用,传递一个可选的参数数组。

定义字符串格式

定义采用 arguments => body 格式,借鉴了类似 CoffeeScript 的语言。例如,以下

$increment = new Lambda('$x => $x + 1');

将翻译为类似

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

允许使用多个参数,并且可以将复杂表达式用作主体。如果参数部分不存在,则自动注入变量 x, y, z 并将其默认为 NULL;因此上述代码可以写为

$increment = new Lmabda('$x + 1');

// or with the lambda helper

$increment = lambda('$x + 1');

// and translates to

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

您可以使用尽可能多的参数和任意复杂的主体定义,尽管我建议您主要用于短匿名函数(我写了这个用来与 Laravel Collection 的 mapfilter 方法一起使用)。

以下是一个测试复杂代码使用的示例情况

function it_allows_complex_code()
    {
        $this
            ->make('$int, $string, $array => strval($int) . strtoupper($string) . $array[0]')
            ->call([100, ' times ', ['Lambda!']])
            ->shouldBe('100 TIMES Lambda!');
    }

限制

在这个阶段,不会对代码进行语法检查,因此您应该只输入受信任和格式良好的定义。它只是将您的代码包裹在函数定义中,添加一些微小的结构控制,并在无法完成任务时抛出异常。我添加了一个测试套件来测试预期的行为,但这是我的第一个软件包,我不认为它可以直接用于生产。

错误和改进

欢迎使用任何帮助来改进该软件包:只需创建一个拉取请求。