2016-06-16 3 views
0

개체를 다른 개체로 변형시키는 방법을 원한다고 가정 해 보겠습니다. >메소드 내부에서 자체 클래스를 변경 하시겠습니까?

def change_type 
    self = self.becomes (A) 
end 

을하지만 어쨌든 나는 "자기"를 변경할 수 없습니다 - B는 A가 (B 모델에서)

객체입니다. 어떻게 해결할 수 있습니까? 모형은 모델에 있어야합니다.

+1

불가능합니다. – mudasobwa

+2

이것은 나에게 나쁜 OOP 냄새가 난다. 왜 그렇게해야할까요? 'B'는 이미'A'를 ___합니다. –

답변

0

방법이 없습니다. self을 덮어 쓸 수 없습니다. 또는 어떤 객체 *, 사실입니다. 당신은 참조/변수를 재 할당 할 수 있습니다 *


아닌 객체 자체.

0

개체를 만든 후에는 클래스를 변경할 수 없으며 개체를 다른 개체로 변경할 수 없습니다.

Smalltalk's become: method은 하나의 객체가 다른 객체가되도록 만들 수 있습니다. 따라서 특별한 경우에도 객체의 클래스도 변경 될 수 있습니다. 루비는 그렇게하지 않습니다.

0

클래스 B이 클래스 A을 상속하는 경우 B의 인스턴스는 A의 인스턴스로 생성됩니다. 변경할 필요가 없습니다.

class A; end 

class B < A; end 

b = B.new 

b.is_a?(A) #=> true 
관련 문제