В Ruby почему Hash [: a, 1] и Hash [[[: a, 1]]] дают одинаковый результат {: a => 1}, а Hash [[: a, 1]] дает пустой хеш ? - PullRequest
4 голосов
/ 17 сентября 2010
 > Hash[:a,2,:b,4]
 => {:a=>2, :b=>4} 

 > Hash[:a,1]
 => {:a=>1} 

 > Hash[[:a,1]]
 => {} 

 > Hash[[[:a,1]]]
 => {:a=>1}

1 Ответ

8 голосов
/ 17 сентября 2010

Вы можете передать пары ключ-значение двумя способами:

  1. Непосредственно в качестве аргументов для Hash::[], причем ключи и значения чередуются
  2. В качестве массива пар каждаяпредставлен массивом, содержащим ключ и значение

Первая форма соответствует 1, вторая форма соответствует 1, четвертая форма соответствует 2, но третья форма также не подходит (она состоит изодин массив, но ни :a, ни 1 не является парой ключ-значение).

Причина, по которой вторая форма полезна, заключается в том, что именно это вы и получаете от методов перечисления Hash - массивпары ключ-значение в массивах.Таким образом, вы можете написать Hash[some_hash.map {|k, v| [k, v+1]}], и вы получите хэш, преобразованный так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...