Кристаллические ассоциативные массивы

Как вы делаете ассоциативные массивы в Crystal?

В этом случае мне нужен массив логических значений для настройки нескольких классов.
Пример:

arr = ??? # what do i place here to make it work ?
arr[:download] = true
arr[:parse] = true
myClass.new(arr)

Я не хочу начинать гадать, были ли разные значения с течением времени (было загружено arr[0] или arr[1] ?)

Я мог бы использовать перечисление для массива

enum Conf
  dowload
  parse
end

а затем используйте значения таким образом

arr[Conf::download] = true
arr[Conf::parse] = true

но это не кажется таким простым в использовании


person Matthieu Raynaud de Fitte    schedule 11.10.2017    source источник


Ответы (1)


Вероятно, вы ищете NamedTuple:

arr = {
  download: true,
  parse: true
}

Если ключи находятся во время компиляции, это, вероятно, лучше всего. В противном случае вам нужно будет использовать хэш, который ведет себя больше как ассоциативный массив в динамическом языке.

person Johannes Müller    schedule 11.10.2017