这有效:
[1, 2].inject({}) do |result, item| end
这也有效:
[1, 2].inject Hash.new do |result, item| end
这会引发 SyntaxError:
[1, 2].inject {} do |result, item| end
{}
在哪些情况下散列文字Hash.new
不可互换?
do |params| ... end
或形式{ |params| ... }
do ... end
或{ ... }
。foo {}
可以解释为将空哈希作为参数foo({})
的方法,即,或者作为传递空块的方法,类似于foo{ |x| }
or foo{ nil }
。Ruby 选择将其解释为前者,这使您的示例成为采用两个块的方法,这在语法上无效。由于您似乎不知道更简洁的块语法,您可以像这样使用它:
squares = [1,2,3,4,5].map{ |x| x*x } #=> [1,4,9,16,25]
这是合法空块语法的(不是很有用)示例:
p [1,2,3].map{} #=> [nil,nil,nil]
该块没有语句,因此块中最后一个表达式的值为 ,块中nil
的每个值都映射到该值。