Hash

HashK 타입의 키에서 V 타입의 값으로의 연결을 나타냅니다. 보통 해시 리터럴을 이용해 만들 수 있습니다.

{1 => 2, 3 => 4}     # Hash(Int32, Int32)
{1 => 2, 'a' => 3}   # Hash(Int32 | Char, Int32)

해시는 키와 값 모두 혼합 타입을 가질 수 있습니다. 이는 K 또는 V가 공용체 타입임을 의미합니다. 이 타입은 KV를 특정하거나 해시 리터럴을 이용함으로써, 해시가 생성되는 시점에 결정됩니다. 후자의 경우 K는 해시 리터럴 키의 공용체로 결정되며 V는 값들의 공용체로 결정됩니다.

빈 해시를 만들 때는 항상 KV를 특정해야 합니다.

{} of Int32 => Int32 # Hash(Int32, Int32).new와 동일
{}                   # 문법 오류

해시와 유사한 타입

다른 타입에서도 배열 리터럴 문법을 사용할 수 있습니다. 단, 그 타입이 인자 없는 new 메서드와 []= 메서드를 정의하는 경우에 한합니다.

MyType{"foo" => "bar"}

MyType이 제너릭이 아니라면, 위 코드는 다음과 동일합니다.

tmp = MyType.new
tmp["foo"] = "bar"
tmp

MyType이 제너릭이라면, 위 코드는 다음과 동일합니다.

tmp = MyType(typeof("foo"), typeof("bar")).new
tmp["foo"] = "bar"
tmp

제너릭 타입인 경우 타입 인자를 특정할 수도 있습니다.

MyType(String, String) {"foo" => "bar"}

results matching ""

    No results matching ""