2015-10-29 4 views
-2

Я понимаю, что у Python есть функция setDefault(), которая позволяет вам установить значение для отсутствующих значений. Тем не менее, мне любопытно, как это будет перенесено на Ruby.Что эквивалентно Ruby для setDefault()?

В частности пример, как это:

animals = Animal.objects 

animal_names = {} 

for animal in animals: 
    a = animal_names.setdefault(animal.name, []) 
    a.append({'color': animal.color, 'size': animal.size}) 

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

+2

Для читателей без Python - что делает этот код? –

+0

Это действительно дубликат, но ответ был неправильным. Я добавил более подробный пример в старшую должность. Я также разместил здесь более простой пример. –

ответ

0

Рубин имеет метод hash.fetch, вы можете использовать его для того же способа корректно обрабатывать недостающие ключи, разница не затем хранить эти значения:

h = {} 
value = h.fetch(:some_key, []) 
# value is now [] 

Другим распространенным способом мы достигаем что вы делаете в Ruby, это:

h[:some_key] ||= [] 

или я предполагаю, что вы даже можете сделать это, если вы хотите назначить, что значение:

value = h[:some_key] ||= [] 
0
h = Hash.new 
h.default = "123" 
puts h[any_key] //Prints 123 
+0

по умолчанию не делает точно то же самое. По умолчанию теперь присваивается это значение любому отсутствующему ключу. В Python он назначит его только определенному ключу. Вы все еще можете сделать это, передав proc для дефолта, но я думаю, что это за борт. –

Смежные вопросы