답변:
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
.@honda.kind_of? Car
하고 @person.is_a? Administrator
, 루비는 미학에 관한 모든 것입니다. 실제로, 문법적인 오류에 주목하십시오. 적극적인 지원으로 다음과 같이 쓸 수 있습니다 :) ... @person.is_an? Administrator
실제로 루비 코어로 만들었을 것입니다.
kind_of?
하지만 무시할 수는 is_a?
없습니까?
is_an?
는 루비 -1.9.2 -p0에 없습니다. @ 클라우드, 아니. is_a?
의 별칭 일뿐입니다kind_of?
. 두 메소드 모두 동일한 c 함수를 호출합니다 rb_obj_is_kind_of
.
kind_of?
하지 않고 재정의 할 수 있습니다 is_a?
.
is_an?
방법 은 어디에 있습니까 ?! 현재 레일 버전이 아니므로 Google에서 더 이상 사용되지 않는 항목을 찾을 수 없습니다.
차이점은 무엇입니까?
설명서에서 :
- -( 부울 )
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
is_a?
그리고kind_of?
존재 하는지에 관해서는 : Ruby의 디자인 철학의 일부라고 생각합니다. 파이썬은 무언가를 할 수있는 유일한 방법이 있다고 말합니다. 루비에는 종종 동의어가 있으므로 더 나은 소리를 사용할 수 있습니다. 그것은 선호의 문제입니다. 그것은 일본의 영향 때문일 수 있습니다. 나는 그들이 더 좋은 소리를 내기 위해 문장에 따라 같은 숫자로 다른 단어를 사용할 것이라고 들었습니다. Matz는 그 아이디어를 그의 언어 디자인에 적용했을 수도 있습니다.