[ruby] Ruby에서 변수가 문자열인지 확인

다음보다 더 관용적 인 것이 있습니까?

foo.class == String



답변

나는 당신이 찾고 있다고 생각합니다 instance_of?. is_a?kind_of?파생 클래스의 인스턴스에 대해 true를 돌려줍니다.

class X < String
end

foo = X.new

foo.is_a? String         # true
foo.kind_of? String      # true
foo.instance_of? String  # false
foo.instance_of? X       # true


답변

더 덕 타이핑 접근법은 다음과 같이 말할 것입니다.

foo.respond_to?(:to_str)

to_str 객체의 클래스가 String의 실제 자손이 아닐 수 있지만 객체 자체가 문자열과 매우 유사 함을 나타냅니다 (stringy?).


답변

넌 할 수있어:

foo.instance_of?(String)

그리고 더 일반적 :

foo.kind_of?(String)


답변

foo.instance_of? String

또는

foo.kind_of? String 

String상속 체인의 어딘가 에서 파생 된 경우에만 관심이 있다면


답변

다른 답변 외에도 Class는 객체가 해당 클래스의 인스턴스인지 테스트하기 위해 === 메서드를 정의합니다.

  • o.class 오의 클래스입니다.
  • o.instance_of? co.class == c 인지 여부를 결정합니다.
  • o.is_a? c o는 c 의 인스턴스입니까, 아니면 하위 클래스입니까?
  • o.kind_of? * is_a? *의 c 동의어
  • c === o 클래스 또는 모듈의 경우 * o.is_a? c * ( String === “s” 는 true를 반환)

답변

더 좋은 방법은 술어 메서드를 만드는 것입니다. 이렇게하면 “단일 제어 지점”도 저장됩니다.

class Object
 def is_string?
   false
 end
end

class String
 def is_string?
   true
 end
end

print "test".is_string? #=> true
print 1.is_string?      #=> false

더 많은 오리 타이핑 방법;)


답변