개체를 다른 개체로 변형시키는 방법을 원한다고 가정 해 보겠습니다. >메소드 내부에서 자체 클래스를 변경 하시겠습니까?
def change_type
self = self.becomes (A)
end
을하지만 어쨌든 나는 "자기"를 변경할 수 없습니다 - B는 A가 (B 모델에서)
객체입니다. 어떻게 해결할 수 있습니까? 모형은 모델에 있어야합니다.개체를 다른 개체로 변형시키는 방법을 원한다고 가정 해 보겠습니다. >메소드 내부에서 자체 클래스를 변경 하시겠습니까?
def change_type
self = self.becomes (A)
end
을하지만 어쨌든 나는 "자기"를 변경할 수 없습니다 - B는 A가 (B 모델에서)
객체입니다. 어떻게 해결할 수 있습니까? 모형은 모델에 있어야합니다.방법이 없습니다. self
을 덮어 쓸 수 없습니다. 또는 어떤 객체 *, 사실입니다. 당신은 참조/변수를 재 할당 할 수 있습니다 *
아닌 객체 자체.
개체를 만든 후에는 클래스를 변경할 수 없으며 개체를 다른 개체로 변경할 수 없습니다.
Smalltalk's become:
method은 하나의 객체가 다른 객체가되도록 만들 수 있습니다. 따라서 특별한 경우에도 객체의 클래스도 변경 될 수 있습니다. 루비는 그렇게하지 않습니다.
클래스 B
이 클래스 A
을 상속하는 경우 B
의 인스턴스는 A
의 인스턴스로 생성됩니다. 변경할 필요가 없습니다.
class A; end
class B < A; end
b = B.new
b.is_a?(A) #=> true
불가능합니다. – mudasobwa
이것은 나에게 나쁜 OOP 냄새가 난다. 왜 그렇게해야할까요? 'B'는 이미'A'를 ___합니다. –