読者です 読者をやめる 読者になる 読者になる

Programmer's Note

コード読み書きの備忘録。

Rubyのlambda使用メモ:ハッシュテーブルに関数を入れて別の関数に渡す

Rubyjavascriptっぽく、ハッシュテーブルに関数の定義を入れて、 別の関数に渡すてのをやってみた話。

javascripは便利で、関数=オブジェクトというところが分かってしまえば、 かなり何でもできてしまう(記述の自由度が高い)。

なにかしら構造体的なもの(まあハッシュテーブル)に関数を入れてしまって、まとめて渡すなんてのもjqueryの定番だ。 例えば、以下のような感じ。

javascript:

function foo(prop) {
    console.log(prop.cmd(prop.name));
}

foo({
    name: "test",
    cmd: function(name) {
        return "Hello, " + name;
    }
});

実行結果:
Hello, test

Rubyの場合、関数はオブジェクトではないので、javascriptほど自由度はないが、 コードブロックを使えば似たようなことは可能。 以下同じことをRubyで書いた場合。lambdaてやつを使えばできる。

Ruby:

def foo(prop) 
    puts prop[:cmd].call(prop[:name])
end

foo ({
    :name => "test",
    :cmd => lambda {|name|
        "Hello, " + name
    }
})

実行結果は右に同じ。

以上。