다른 메서드에 특정 메서드를 연기하거나 위임하는 메서드를 작성하려고하지만 코드가있는 경우에만 코드를 약간 마셔야합니다. 다음은 기본적인 아이디어입니다. Shipment < AbstractShipment
은 Reroute < AbstractShipment
일 수 있습니다. Shipment
또는 Reroute
중 하나는 Delivery
(또는 배송)이지만 둘 다 가질 수는 없습니다.별칭이 지정된 메서드에서 슈퍼를 호출하는 중
shipment.deliveries를 호출 할 때 우선 경로 변경이 있는지 확인하고 싶습니다. 그렇지 않다면 AbstractShipment
의 deliveries
메소드를 호출하십시오. 그렇다면 리 라우트에 메소드를 위임하십시오.
module Kernel
private
def this_method
caller[0] =~ /`([^']*)'/ and $1
end
end
class Shipment < AbstractShipment
...
def deferToReroute
if self.reroute.present?
self.reroute.send(this_method)
else
super
end
end
alias_method :isComplete?, :deferToReroute
alias_method :quantityReceived, :deferToReroute
alias_method :receiptDate, :deferToReroute
end
Kernel.this_method가 호출하는 방법을 알아내는 단지 편리합니다. 그러나 super
를 호출하면 내가 조금 검색이 루비 1.8의 버그이지만 1.9에 고정되어 있음을 설명 this link을 발견
super: no superclass method `deferToReroute'
가 발생합니다. 불행히도이 코드를 1.9로 업그레이드 할 수 없으므로 해결 방법에 대한 제안 사항이 있습니까? 내 코드에서 보는 조금, 나는 실제로 내가 한 모든 방법 별칭을 할 필요가 없습니다 실현 후, 나는 실제로에만 필요가 덮어 쓰기 :
이편집 :-)
감사합니다 다른 세 사람이 계산을 위해 실제로 호출하기 때문에 전달 방법. 그러나, 나는 전에 이것에 부딪 쳤기 때문에 항상 너희들의 생각을 알고 싶다.
굉장! 만약 내가 조금 더 오래 놀아왔다면 비슷한 것을 시도하는 플러그인을 작성했기 때문에 이런 식으로 시도했을 것입니다. 그러나 그것이 깨끗했을 것입니다. 매우 감사합니다 :-) –