これは機能します:
[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({})
と同様に空のブロックが渡されるメソッドのいずれかとして解釈できます。Rubyはこれを前者として解釈することを選択します。これにより、例は2つのブロックを取るメソッドとして残りますが、構文的には有効ではありません。foo{ |x| }
foo{ nil }
より簡潔なブロック構文に気付いていないように思われるので、次のように使用できます。
squares = [1,2,3,4,5].map{ |x| x*x } #=> [1,4,9,16,25]
そして、これが合法的な空のブロック構文の(あまり役に立たない)例です:
p [1,2,3].map{} #=> [nil,nil,nil]
ブロックにはステートメントがないため、ブロック内の最後の式の値はであり、nil
これにブロック内の各値がマップされます。