在任何情况下,实现为 lambda 哈希的调度表可能与覆盖 Ruby 的 method_missing 一样好,甚至更好?我之所以问,是因为我今天使用了这种技术,因为我是 Ruby 的新手,但之前有 Perl 背景,维基百科中的调度表示例甚至是用 Perl 实现的;)请参阅:
http://en.wikipedia.org/wiki/Dispatch_table
无论如何,使用调度表而不是 method_missing 有什么缺点。也许我下面的 Ruby 代码提供了线索?看起来我的调度表可能会变得非常大,并且无法访问它包含的 lambdas 以在另一个上下文中使用。所以也许我在某种程度上回答了我的问题,但我真的很感兴趣,什么时候调度表可能是比 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