PHP版 List_RubyLike
PHP で遊んでいます。
練習がてら、以前に作った List::RubyLike (http://github.com/naoya/list-rubylike) という Perl モジュール *1 の PHP での実装を作ってみました。
<?php require_once 'List/RubyLike.php'; echo LR(array("foo", "bar")) ->push("baz", "piyo") ->map(function ($v) { return strtoupper($v); }) ->join(", ") . "\n"; echo LR(range(1, 5)) ->grep(function ($n) { return $n % 2 == 0; }) ->map(function ($n) { return $n * $n; }) ->sum() . "\n"; ?>
とすると
% php example.php FOO, BAR, BAZ, PIYO 20
となります。配列周りの関数をラップしてメソッドチェインで呼べるメソッドを追加するクラスです。
テストは Perl の Test::More ライクなテストができるという、Symfony の "Lime Testing Framework を使ってみました。
<?php require_once 'lib/lime.php'; require_once 'List/RubyLike.php'; $t = new lime_test(); $list = LR(array(2, 4, 6, 8, 10)); $t->ok($list); $t->is($list->length(), 5); $t->is($list->first(), 2); $t->is($list->last(), 10); $t->is($list->sum(), 30);
と Test::More のように書けて
と色付で出力されます。良いですね。
習作なので、実装してないメソッドがちらほらありますがとりあえずこんなところで。PHPの作法周りがまだまだ分からないので、おかしなところとか教えてください。
*1:CPAN にこれを取り込んでもらった List::Rubyish (http://search.cpan.org/dist/List-Rubyish/) があります