Причина использования «Hash.new {Hash.new (false)}» - PullRequest
0 голосов
/ 31 мая 2019

Обнаружен некоторый код, который устанавливает переменную экземпляра следующим образом:

@square_array = Hash.new { Hash.new(false) }

Есть ли причина делать это таким образом?

Вместо одного из следующих:

@square_array = Hash.new 

# or

@square_array = {}

1 Ответ

5 голосов
/ 31 мая 2019

Да, есть причина.Если вы определяете хеш с помощью {} и пытаетесь получить значение несуществующего ключа, вы получаете nil

hash = {}
#=> {}
hash[:a]
#=> nil

Но если вы определите его с помощью Hash.new, вы можете установить определение для несуществующегосуществующий ключ

hash =  Hash.new { Hash.new(false) }
#=> {}
hash[:a]
#=> {}
hash[:a][:a]
#=> false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...