zonuexe / functools
0.2.0
2015-11-23 10:49 UTC
Requires (Dev)
- emonkak/underbar.php: dev-master
- ginq/ginq: dev-master
- phploc/phploc: ^2.1.5
- phpmd/phpmd: @stable
- phpunit/phpunit: ^4.8.18
- satooshi/php-coveralls: dev-master
- theseer/phpdox: ^0.8.1.1
Suggests
This package is not auto-updated.
Last update: 2024-09-14 16:29:28 UTC
README
PHP的函数工具箱
安装
Composer
composer require zonuexe/functools
特性
Functools\Operator
Functools::partial(callable $callback, array $arguments, int $pos)
- 为callable提供部分应用(
arary_map
友好)
- 为callable提供部分应用(
Functools::arity(callable $callback)
- 分析
$callback
的arity(参数数量)。
- 分析
Functools::curry(callable $callback)
- 对
$callback
对象进行Currying。
- 对
Functools::op(string $symbol, [array $arguments, int $pos])
- 获取可调用对象(以及部分应用)。
Functools::compose(callable $callback,...)
- 函数组合.
Functools::pipe(mixed $value, callable $callback...)
- Pipeline样式的函数组合
Functools::tuple(mixed $item,...)
- 创建n-Tuple。
Functools::fix(callable $callback)
Functools::memoize(callable $callback, [array $cache])
- 使用Memoization的函数优化器。
- 此功能将有助于优化透明引用显式定义方程的优化。
迭代
此库没有迭代器。你可以通过选择喜欢的迭代器库来组合它。
- PHP
array
和函数 - Underbar.php - 类似于Underscore.js的PHP集合处理库。
- Ginq
- nikic\iter
使用方法
日语版本:http://qiita.com/tadsan/items/abc52f0739ab5b4e781b
简短语法
use Teto\Functools as f;
f::partial()
$comma = f::partial("implode", [", "]); $comma(range(1, 10)); // "1, 2, 3, 4, 5, 6, 7, 8, 9, 10" $join_10 = f::partial("implode", [1 => range(1, 10)], 0); $join_10("@"); // "1@2@3@4@5@6@7@8@9@10" $join_10("\\"); => "1\\2\\3\\4\\5\\6\\7\\8\\9\\10" $sleep3 = f::partial("sleep", [3]); $sleep3(); $sleep3("foo"); // Error! $sleep3 = f::partial("sleep", [3], -1); $sleep3("foo"); // OK!
f::op()
$add = f::op("+"); $add(2, 3); // (2 + 3) === 5 $add_1 = f::op("+", [1]); $add_1(4); // (1 + 4) === 5 $half = f::op("/", [1 => 2], 0); $half(10); // (10 / 2) === 5
f::tuple()
$teto = f::tuple("Teto Kasane", 31, "2008-04-01", "Baguette"); $ritsu = f::tuple("Ritsu Namine", 6, "2009-10-02", "Napa cabbage"); // index access $teto[0]; // "Teto Kasane" $teto[1]; // 31 $teto[2]; // "2008-04-01" $teto[3]; // "Baguette" // property access $tetop = f::tuple("name", "Teto Kasane", "age", 31, "birthday", "2008-04-01", "item", "Baguette"); $ritsup = f::tuple("name", "Ritsu Namine", "age", 6, "birthday", "2009-10-02", "item", "Napa cabbage"); $tetop->pget("name"); // "Teto Kasane" $tetop->pget("age"); // 31 $tetop->pget("birthday"); // "2008-04-01" $tetop->pget("item"); // "Baguette"
f::fix()
$fib = f::fix(function ($fib) { return function ($x) use ($fib) { return ($x < 2) ? 1 : $fib($x - 1) + $fib($x -2); }; }); $fib(6); // 13
f::memoize()
// simple fibonacci function. But, very very slow. $fib1 = function ($n) use (&$fib1) { return ($n < 2) ? $n : $fib1($n - 1) + $fib1($n - 2); }; // simple fibonacci function too. very fast! $fib2 = f::memoize(function ($n) use (&$fib2) { return ($n < 2) ? $n : $fib2($n - 1) + $fib2($n - 2); }, [0, 1]);
版权
见./LICENSE
。
Functional toolbox
Copyright (c) 2015 USAMI Kenta <tadsan@zonu.me>
テト・カサネ
我喜欢テト・カサネ。(日文:[http://kasaneteto.jp/](http://kasaneteto.jp/))
r /
__ , --ヽ!-- .、_
! `/::::;::::ヽ l
!二二!::/}::::丿ハニ|
!ニニ.|:/ ノ/ }::::}コ
L二lイ 0´ 0 ,':ノコ
lヽノ/ヘ、 '' ▽_ノイ ソ
ソ´ /}`ス / ̄ ̄ ̄ ̄/
.(_:;つ/ 0401 / カタカタ
 ̄ ̄ ̄ ̄ ̄\/____/