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

时间:2013-11-23 17:15:43

标签: ruby

我喜欢Ruby do ... end块的感觉,我希望能够用它来初始化哈希。我知道花括号结构,例如

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

但是我想知道是否有办法用do块做同样的事情,例如。

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

修改

让我更清楚:我确实理解哈希文字不是一个块,我对块的内部有很好的把握。我想知道的更多的是:

是否有可能通过(但不限于)一些聪明的元编程方法来编写一个函数,使得传入其中的块被解释为哈希?

1 个答案:

答案 0 :(得分:1)

这有点类似于您想要的示例代码,但do ... end已消失:

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

不幸的是keys do a: 1, b: 2 end与Ruby的语法不匹配。当然,仍然可以编写一个预处理器,它将运行在源文件上,将您添加的语法重写为标准的Ruby语法,然后将其提供给解释器。这不仅仅是一点点疯狂,但如果你想这样做,给你更大的力量......