이 코드를 생각해 보자. 이 복제본을 새로운 클래스 ImmutableStructWithId
으로 제거하고 싶습니다. 다음과 같이 그 새로운 클래스는 위의 2 개 라인을 다시 할 수 있도록합니다 : 루비의 초기화가 (그렇지 않은) 공장 기능처럼 일 초기화 프로그램에서 다른 객체의 생성자를 사용 하시겠습니까?</p> <pre><code>Campus = ImmutableStruct.new(:id, :name, :timezone) do def hash; id end end Merchant = ImmutableStruct.new(:id, :name, :campus) do def hash; id end end </code></pre> <p>을 주목 <code>hash</code> 방법의 중복 :
Campus = ImmutableStructWithId.new(:id, :name, :timezone)
Merchant = ImmutableStructWithId.new(:id, :name, :campus)
경우
는 다음과 같이 내가 원하는 것 무엇 :를 초기화가되지 반환 그들이 만들고있는 객체을하기 때문에class ImmutableStructWithId
def initialize(*args)
ImmutableStruct.new(*args) do
def hash; id end
end
end
end
내가, 위의 작동하지 않습니다 알고, 그들은 단지 이 초기화합니다. 그러나 이 공장 기능처럼 작업을 수행했다면 위의 내용을 수행하고 싶습니다.
루비에서 동일한 효과를 얻으려면 올바른 방법은 무엇입니까?
는 또한, 내가 어떤 생성자 세부 사항을 볼 수 없습니다. 메소드 정의를 반복하지 않으려 고합니다. –
수정하십시오. 궁극적으로 나는 해시 정의를 반복하지 않으려 고하고 구운 것을 가지고있는 특정 클래스를 사용하고 싶다. – Jonah
장식 자/위임자. –