NamedTuple

NamedTuple (이름 있는 튜플)

여러 값을 하나로 묶되, 각 값에 이름을 붙여서 의미를 분명히 하고 싶을 때 쓰는 것이 NamedTuple이에요. 일반 튜플이 위치로만 값을 구분한다면, NamedTuple은 name: 값 형태로 각 원소에 이름을 달아줘요.

출처: Crystal 공식 문서 - NamedTuple

본문

NamedTuple은 보통 이름 있는 튜플 리터럴로 만들어요.

tuple = {name: "Crystal", year: 2011} # NamedTuple(name: String, year: Int32)
tuple[:name]                          # => "Crystal" (String)
tuple[:year]                          # => 2011      (Int32)

원소에 접근할 때는 위치(index) 대신 [:name]처럼 이름 키를 사용해요. 이름 있는 튜플 타입을 표기하려면 이렇게 써요.

# x: Int32, y: String을 가지는 named tuple 타입 표기
NamedTuple(x: Int32, y: String)

타입 제약, 제네릭 타입 인자처럼 타입이 기대되는 자리에서는 더 짧은 문법을 쓸 수 있어요. 이 내용은 타입 문법에서 설명해요.

# x: Int32, y: String을 가지는 named tuple들의 배열
Array({x: Int32, y: String})

named tuple의 키는 문자열 리터럴일 수도 있어요.

{"this is a key": 1}

{"this is a key": 1}처럼 키에 공백이 필요한 이름도 문자열 리터럴로 표현할 수 있죠.

더 알아보기

  • 위치로만 값을 구분하는 일반 튜플은 Tuple 문서에서 다뤄요.
  • 타입을 축약해서 쓰는 문법은 타입 문법에서 확인할 수 있어요.