/ / Разбиране на създаването на хеш - рубин

Разбирането на създаването на хеш - рубин

Аз съм много нов за Ruby и се опитвам да разбера следното хеш създаването:

hash = Hash.new { |hash, key| hash[key] = [] }

Как мога да го интерпретирам? Синтаксисът (съдържанието на блока) още не ми е ясно.

Отговори:

2 за отговор № 1

Hash.new - Обаждате конструктора на Hash

{ |hash, key| hash[key] = [] } - преминавате този блок към конструктора. Този блок казва на хеш: когато срещнете неизвестен ключ, създайте нова двойка ключ / стойност, с този ключ като ключ и новоразпределен празен масив като стойност.

hash = - За тази променлива присвоявате новия хеш, но не го използвайте hash като променливо име! Това вече е името на метод за всеки обект, чиито класови подкласове Object.

Има и по-проста нотация:

Hash.new([])

но това рядко е това, което искате, защото: a) всички препратки към несъществуващи ключове ще имат същия масив и б) няма да доведе до създаването на двойки ключ / стойност:

2.3.0 :001 > h = Hash.new([])
=> {}
2.3.0 :002 > h[:a] << 1
=> [1]
2.3.0 :003 > h[:b]
=> [1]
2.3.0 :004 > h.keys.include? :a
=> false
2.3.0 :005 > h.keys
=> []

По отношение на синтаксиса на |hash, key|, този фрагмент служи точно за същата цел като списъка с аргументи с параметри на метода, напр. (hash, key) в кода по-долу:

def f(hash, key)
hash[key] = []
end