我喜欢Ruby do ... end
块的感觉,我希望能够用它来初始化哈希。我知道花括号结构,例如
h = {
:a => 10,
:b => 20
}
但是我想知道是否有办法用do块做同样的事情,例如。
h_keys = keys do
:a => 10,
:b => 20
end
修改
让我更清楚:我确实理解哈希文字不是一个块,我对块的内部有很好的把握。我想知道的更多的是:
是否有可能通过(但不限于)一些聪明的元编程方法来编写一个函数,使得传入其中的块被解释为哈希?
答案 0 :(得分:1)
这有点类似于您想要的示例代码,但do
... end
已消失:
def keys(x); x; end
h = keys a: 1, b: 2
不幸的是keys do a: 1, b: 2 end
与Ruby的语法不匹配。当然,仍然可以编写一个预处理器,它将运行在源文件上,将您添加的语法重写为标准的Ruby语法,然后将其提供给解释器。这不仅仅是一点点疯狂,但如果你想这样做,给你更大的力量......