다음은 거래입니다. 클래스 Box의 특정 인스턴스를 몇 가지 방법으로 확장해야합니다. 내가 살고있는 모듈을 포함 할 필요가있는 메소드와 박스 인스턴스가 이 될 수 있기를 원한다면, 모듈은 동적으로을 포함합니다. 지금 내가 평가 후면에 후크를 사용하고 있습니다 : 그것은 매우 잘 작동되지만모듈의 메소드를 클래스의 특정 인스턴스에 동적으로 추가하십시오.
class Box
def after_initialize
if self.injected_module.present?
eval("class << self; include #{self.injected_module}; end")
end
end
end
내가 평가를 사용할 때 난 정말 더러운 느낌. 내가 그런 일을 찾고 있어요 :
module_to_inject = self.injected_module
self.eigenclass.class_eval do
include module_to_inject
end
하지만 난 같은 클래스 monkeypatching없이 class_eval를 실행하는 eigenclass를 얻을 수있는 게 아니에요 :
class Box; def eigenclass; class << self; self; end end end
것은 아름다운 있는가 나를 위해 (그리고 신뢰할 수있는) 방법이?
고마워요! 그것은 매력처럼 일했습니다! –