차이점은 무엇입니까? 언제 사용해야합니까? 왜 그렇게 많은가?
답변
kind_of?
그리고 is_a?
동의어입니다.
instance_of?
true
객체가 서브 클래스가 아닌 정확한 클래스의 인스턴스 인 경우 에만 반환한다는 점에서 다른 두 개와 다릅니다 .
예:
"hello".is_a? Object
및"hello".kind_of? Object
반환true
하기 때문에이"hello"
이다String
과String
의 서브 클래스입니다Object
.- 그러나를
"hello".instance_of? Object
반환합니다false
.
답변
차이점은 무엇입니까?
설명서에서 :
- -( 부울 )
instance_of?(class)
- 주어진 클래스의 인스턴스
true
인지 여부를 반환 합니다obj
.
과:
- -( 부울 )
is_a?(class)
-( 부울 )kind_of?(class)
- 반환
true
하는 경우class
의 클래스 인obj
경우, 또는이class
의 상위 클래스 중 하나obj
에 포함 또는 모듈obj
.
즉 불분명 경우, 무엇을 알고 좋을 것이다 정확하게 문서를 향상시킬 수 그래서, 불분명하다.
언제 사용해야합니까?
못. 대신 다형성을 사용하십시오.
왜 그렇게 많은가?
내가 전화하지 않을 이 “다”. 두 가지 다른 일을하기 때문에 두 가지가 있습니다.
답변
객체를 사용하여 필요한 메소드에 응답하는지 여부를 묻는 것이 Ruby와 비슷합니다 respond_to?
. 이를 통해 최소한의 인터페이스와 구현을 인식하지 못하는 프로그래밍이 가능합니다.
물론 항상 적용 가능한 것은 아니므로, 요청하는 방법을 사용하여 클래스 또는 기본 클래스 인 “유형”에 대한보다 보수적 인 이해를 요구할 가능성이 여전히 있습니다.
답변
나는 또한이 개 많은 전화 (하지 않을 is_a?
와 kind_of?
같은 방법의 별명이다)하지만, 더 많은 가능성을 볼에 관심을 설정하려면 #class
방법 :
A = Class.new
B = Class.new A
a, b = A.new, B.new
b.class < A # true - means that b.class is a subclass of A
a.class < B # false - means that a.class is not a subclass of A
# Another possibility: Use #ancestors
b.class.ancestors.include? A # true - means that b.class has A among its ancestors
a.class.ancestors.include? B # false - means that B is not an ancestor of a.class
답변
