an answer to a previous question에서 언급했듯이 B < A
은 클래스가 다른 클래스의 하위 클래스인지 여부를 쉽게 판단 할 수있는 방법입니다. 그러나 이것은 B
이 싱글 톤 클래스 (즉, 고유 클래스) 일 때 루비 1.8 (또한 REE 1.8)에서 실패한 것으로 보인다. 설명하기 :Ruby 1.8 vs. 1.9 : Ruby 싱글 톤 클래스가 다른 클래스의 서브 클래스인지 확인
class A; end
class B < A; end
b = B.new
B.ancestors # => [B, A, Object, Kernel] (also BasicObject in 1.9)
(class << b; self; end).ancestors # => [B, A, Object, Kernel] (also BasicObject in 1.9)
B < A # => true
(class << b; self; end) < A # => true in 1.9; false in 1.8
당신이 볼 수 있듯이, A
는 싱글 톤 클래스 (class << b; self; end
)의 조상으로 표시하더라도, 그것은 당신이 루비 1.8 A
자사의 여부 서브 클래스를 확인할 때 false
가 (그러나 제대로 돌려줍니다 1.37에서 true
).
B.superclass
# => A
(class << b; self; end).superclass
# => B in 1.9
# => singleton class of B in 1.8
(class << b; self; end).superclass.superclass
# => A in 1.9
# => singleton class of Class in 1.8
는 사람이 1.9으로 고정 혹은 의도적 1.9에서 변경된 동작을 예상 할 수있는 일이 1.8의 버그인지 알고 있나요 다음 #superclass
체인이 경우 이유를 보여 나타납니다 다음? 다른 곳에서이 문제에 대한 언급이나 문서를 찾으려고했지만 아무 것도 찾을 수 없었습니다.
그리고이 문제로 인해 누구나 을 알 수 있습니까? 싱글 톤 클래스가 Ruby 1.8의 서브 클래스 A
인지 확인하는 가장 좋은 방법은 무엇입니까? 조상 목록에 포함 된 모듈이 포함되어 있기 때문에 기술적으로 "올바르지"않더라도 해결 방법으로 (class << b; self; end).ancestors.include?(A)
을 수행했습니다.