simones / lambda
该软件包最新版本(dev-master)没有可用的许可证信息。
从定义字符串创建闭包。
dev-master
2016-08-28 16:23 UTC
Requires
- php: >=5.5.0
Requires (Dev)
- phpspec/phpspec: ^3.0
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 的 map
和 filter
方法一起使用)。
以下是一个测试复杂代码使用的示例情况
function it_allows_complex_code() { $this ->make('$int, $string, $array => strval($int) . strtoupper($string) . $array[0]') ->call([100, ' times ', ['Lambda!']]) ->shouldBe('100 TIMES Lambda!'); }
限制
在这个阶段,不会对代码进行语法检查,因此您应该只输入受信任和格式良好的定义。它只是将您的代码包裹在函数定义中,添加一些微小的结构控制,并在无法完成任务时抛出异常。我添加了一个测试套件来测试预期的行为,但这是我的第一个软件包,我不认为它可以直接用于生产。
错误和改进
欢迎使用任何帮助来改进该软件包:只需创建一个拉取请求。