我定义了一些这样的函数:
def func1(hash)
hash.each do |key, value|
puts "#{key}, #{value}"
end
end
我可以这样调用函数:
func1({somekey: "somevalue"})
func1(somekey: "somevalue")
func1 somekey: "somevalue"
但这种格式不起作用:
func1 {somekey: "somevalue"}
请解释一下。
答案 0 :(得分:1)
使用由空格分隔的花括号{}
是如何在ruby中声明块的,因此解析步骤中存在冲突。 Ruby认为你将这个方法传递给了一个块。
例如,这是一个传递给select
方法的块:
[1, 2, 3].select { |x| x >= 2 } # => [2, 3]
您可以将其称为“内联”块,它可以替代使用do..end
(略有差异)。
在我看来,最好坚持使用括号()
func1({somekey: "somevalue"})