PHP版 List_RubyLike

PHP で遊んでいます。

練習がてら、以前に作った List::RubyLike (http://github.com/naoya/list-rubylike) という Perl モジュール *1PHP での実装を作ってみました。

<?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/) があります