is_a?

is_a? (타입 검사)

어떤 값이 특정 타입인지 확인하고 싶을 때 쓸 수 있는 게 is_a? 메서드예요. 다만 이것은 일반 메서드가 아니라 **컴파일러가 알고 있는 의사-메서드(pseudo-method)**라서, 타입 정보를 바꾸는 데에도 영향을 줄 수 있어요.

출처: Crystal 공식 문서 - is_a?

본문

의사-메서드 is_a?는 표현식의 런타임 타입이 다른 타입을 상속하거나 포함하는지를 판단해요.

a = 1
a.is_a?(Int32)          # => true
a.is_a?(String)         # => false
a.is_a?(Number)         # => true
a.is_a?(Int32 | String) # => true

1Int32이므로 is_a?(Int32)true이고, 문자열이 아니므로 is_a?(String)false예요. Int32Number의 하위 타입이므로 is_a?(Number)true이며, 유니온 Int32 | String의 한 구성원이므로 이것도 true예요.

is_a?는 컴파일러가 알고 있어서 타입 정보에 영향을 줄 수 있는 의사-메서드예요. 이에 대해서는 if var.is_a?(...) 문서에서 자세히 설명해요. 또한 인자로는 컴파일 타임에 알 수 있는 타입이 와야 해요. 타입 문법에 대한 내용은 타입 문법을 참고하세요.

더 알아보기

  • is_a?if 조건으로 쓰면 타입이 좁혀지는 걸 활용할 수 있어요. if var.is_a?(...) 문서를 확인해 보세요.
  • 타입을 표현하는 다양한 문법은 타입 문법에서 다뤄요.