Существуют ли ситуации, когда таблица диспетчеризации, реализованная в виде хеша лямбда-выражений, может быть настолько же хорошей, если не лучше, чем переопределение метода method_missing в Ruby? Я спрашиваю, потому что я использовал эту технику сегодня, так как я сравнительный новичок с 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