簡體   English   中英

是否可以使用do塊初始化Ruby哈希?

[英]Is it possible to initialize a Ruby hash with a do block?

我喜歡Ruby do ... end塊的感覺,並且我希望能夠使用它來初始化哈希。 我知道花括號的構造,例如

h = {
  :a => 10,
  :b => 20
}

但是我想知道是否有辦法用do塊做同樣的事情,例如

h_keys = keys do
  :a => 10,
  :b => 20
end

編輯

讓我更清楚一點:我確實理解哈希文字不是一個塊,並且我對塊的內部有了很好的了解。 我想知道的更多是這樣的:

是否有可能通過(但不限於)某種聰明的元編程方法來編寫一個函數,以便將傳遞給它的塊解釋為哈希?

盡管do ... end了,但這有點類似於您所需的示例代碼:

 def keys(x); x; end
 h = keys a: 1, b: 2

不幸的是, keys do a: 1, b: 2 end與Ruby的語法不匹配。 當然,您仍然可以編寫一個可以在源文件上運行的預處理器,將添加的語法重寫為標准Ruby語法,然后將其提供給解釋器。 那會有點瘋狂,但是如果您想這樣做,就會為您帶來更大的力量...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM