Именованный кортеж
NamedTuple обычно создаётся с помощью литерала именованного кортежа:
tuple = {name: "Crystal", year: 2011} # NamedTuple(name: String, year: Int32)
tuple[:name] # => "Crystal" (String)
tuple[:year] # => 2011 (Int32)
Чтобы обозначить тип именованного кортежа, можно написать:
# The type denoting a named tuple of x: Int32, y: String
NamedTuple(x: Int32, y: String)
В ограничениях типов, аргументах обобщённых типов и других местах, где ожидается тип, можно использовать сокращённый синтаксис, как описано в грамматике типов:
# An array of named tuples of x: Int32, y: String
Array({x: Int32, y: String})
Ключ именованного кортежа также может быть строковым литералом:
{"this is a key": 1}
To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/reference/1.2/syntax_and_semantics/literals/named_tuple.html