Я люблю чувствовать блок Ruby do ... end
, и мне бы хотелось использовать его для инициализации хэша. Я знаю о фигурной фигурной скобке, например.Возможно ли инициализировать хэш-код Ruby блоком do?
h = {
:a => 10,
:b => 20
}
Но мне было интересно, есть ли способ сделать то же самое с блоком do, например.
h_keys = keys do
:a => 10,
:b => 20
end
Редактировать
Позвольте мне быть ясным: я понимаю, что хэш-литерал не блок, и у меня есть довольно хорошее представление о внутренностях блока. Что мне интересно, так это следующее:
Возможно ли, возможно, с помощью (но не ограничено) каким-то умным методом метапрограммирования написать такую функцию, чтобы переданный в нее блок интерпретировался как хэш ?
если вы google 'ruby hash', вы найдете документацию для него в лучших результатах и все вам нужно знать о них (включая его конструктор, который действительно позволяет использовать блок) –
Мне непонятно ... можете ли вы немного конкретнее? Вы видели http://www.ruby-doc.org/core-2.0.0/Hash.html#method-c-new? –
sawa правильно, что ответ «нет», но я хотел добавить, что, вероятно, это будет очень полезно, если вы лучше поймете, что происходит внутри блоков. Есть несколько замечательных сообщений в блоге (также некоторые объясняют разницу между блоками, procs и lambdas). Когда вы поймете блоки, вы поймете, что они могут и чего не могут сделать, и эффективное использование их в вашем коде может быть действительно полезным. – farski