typeof

typeof는 표현식의 타입을 반환합니다.

a = 1
b = typeof(a) #=> Int32

인자를 여러 개 넘길 경우 결과는 모든 타입의 공용체입니다.

typeof(1, "a", 'a') #=> (Int32 | String | Char)

typeof는 컴파일러의 타입 추론 능력을 이용하기 위한 목적으로 제너릭 코드에서 사용되곤 합니다.

hash = {} of Int32 => String
another_hash = typeof(hash).new #:: Hash(Int32, String)

typeof가 실제로 표현식을 평가하는 것은 아니므로, 컴파일 시간에도 사용할 수 있습니다. 다음 예에서는 중첩된 타입 인자로부터 재귀적으로 공용체 타입을 생성해 냅니다.

class Array
  def self.elem_type(typ)
    if typ.is_a?(Array)
      elem_type(typ.first)
    else
      typ
    end
  end
end

nest = [1, ["b", [:c, ['d']]]]
flat = Array(typeof(Array.elem_type(nest))).new
typeof(nest) #=> Array(Int32 | Array(String | Array(Symbol | Array(Char))))
typeof(flat) #=> Array(String | Int32 | Symbol | Char)

타입 문법에서도 이 표현식을 사용할 수 있습니다.

results matching ""

    No results matching ""