ラムダのハッシュとして実装されたディスパッチ テーブルが、Ruby の method_missing をオーバーライドするよりも優れているとは言わないまでも、同じくらい良い状況はありますか? 私はRubyの比較的初心者ですが、以前はPerlのバックグラウンドがあり、ウィキペディアのディスパッチテーブルの例はPerlでも実装されているため、今日この手法を使用したためです;)参照:
http://en.wikipedia.org/wiki/Dispatch_table
いずれにしても、method_missing の代わりにディスパッチ テーブルを使用することの欠点は何ですか。以下の私のRubyコードが手がかりになるでしょうか?私のディスパッチ テーブルは非常に大きくなる可能性があり、別のコンテキストで使用するためにそこに含まれるラムダにアクセスする方法はありません。質問にはある程度答えているかもしれませんが、ディスパッチ テーブルが method_missing やその他のメタ プログラミング手法よりも優れたソリューションになる可能性があることに本当に興味があります。
def dispatch_self_and_modified_ancestors(key, value, work_effort)
dispatch_table = {
:scheduled_completion_date => lambda {|work_effort, updated_value|
modified_ancestors = []
while work_effort.parent
work_effort = work_effort.parent
if updated_value > work_effort.scheduled_completion_date
work_effort.scheduled_completion_date = updated_value
work_effort.save
modified_ancestors.push work_effort
else
break
end
end
return modified_ancestors
}
}
if dispatch_table.has_key?(key)
return dispatch_table[key].call(work_effort, value)
else
return []
end
end