Rubyでjavascriptっぽく、ハッシュテーブルに関数の定義を入れて、 別の関数に渡すてのをやってみた話。
javascripは便利で、関数=オブジェクトというところが分かってしまえば、 かなり何でもできてしまう(記述の自由度が高い)。
なにかしら構造体的なもの(まあハッシュテーブル)に関数を入れてしまって、まとめて渡すなんてのもjqueryの定番だ。 例えば、以下のような感じ。
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 } })
実行結果は右に同じ。
以上。