lambdas의 해시로 구현 된 디스패치 테이블이 Ruby의 method_missing을 오버 라이딩하는 것보다 좋지 않더라도 좋을지는 모르는가요?루비에서 디스패치 테이블이 method_missing만큼 좋은가요?
http://en.wikipedia.org/wiki/Dispatch_table
을 : 참조), 나는 루비와 비교 초보자 해요,하지만 이전에 펄 배경을 가지고 있고, 위키 백과에서 파견 테이블 예 심지어 Perl로 구현 나는 오늘이 기술을 사용하기 때문에 내가 부탁 해요어떤 경우에도 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
감사합니다, 그것은 나에게 다시 인수 분해 아이디어를 부여하고있다. 예를 들어 위의 새 람다를 추가하면 빈 "modified_ancestors"를 초기화 한 다음 동일한 값을 반환하므로 개별 람다 외부로 이동할 수있는 "상태"가됩니다. –