igorw/compose

函数组合。

v1.0.1 2013-04-20 00:49 UTC

This package is not auto-updated.

Last update: 2024-09-09 10:59:33 UTC


README

函数组合。

允许您将函数拼接在一起形成管道。如果您需要在多个步骤中转换数据,并且希望从高层次描述这些步骤,这可能会很有用。

compose

通常,函数组合意味着取两个函数 fg,并生成一个新的函数 z,该函数将 f 应用到 g 的结果上。

z = compose(f, g)
; z(x) => f(g(x))

此库提供了一个执行此操作的 compose 函数。

$z = igorw\compose($f, $g);
var_dump($z($x));

它通过可变参数支持任意数量的函数组合。

$z = igorw\compose($f, $g, $h, $i);

最内层的函数(列表中的最后一个)可以接受任意数量的参数,而其他函数可能只能接受单个参数。

$z = igorw\compose($f, $g);
$z('a', 'b', 'c');
// => $f($g('a', 'b', 'c'))

管道

pipelinecompose 相同,但参数顺序相反。在某些情况下,这更易于阅读,因为您可以根据函数将被调用的顺序列出函数。

在这一点上,它与 Unix 管道非常相似。

示例

function transform_data($data) {
    return [
        'name' => $data['firstname'].' '.$data['lastname'],
    ];
}

$transformJson = igorw\pipeline(
    function ($json) { return json_decode($json, true); },
    'transform_data',
    'json_encode'
);

$json = <<<EOF
{"firstname": "Igor", "lastname": "Wiedler"}
{"firstname": "Beau", "lastname": "Simensen"}
EOF;

$list = explode("\n", $json);
$newList = array_map($transformJson, $list);
$newJson = implode("\n", $newList);

// =>
// {"name": "Igor Wiedler"}
// {"name": "Beau Simensen"}