Rubyのdo…endと{…}の違い
慣習的に、ブロックを複数行で書くときはdoとendを使い、1行で書くときは{と}を使うことが多いです。( #ゼロからわかる_Ruby_超入門 より)
#プロを目指す人のためのRuby入門 でも同様の記述あり
ブロック付きメソッド呼び出し
do...endは、結びつきが弱く、{...}は結びつきが強い
code:sample.rb
# do...end のブロックは渡されない
p 1, 3, 2, "2", "3".uniq do |n| n.to_s end # => 1, 3, 2, "2", "3"
# 引数を()で囲まない場合、 do...end が無視されたような解釈になる
p 1, 3, 2, "2", "3".uniq # => 1, 3, 2, "2", "3"
p 1, 3, 2, "2", "3".uniq! # => nil
# ブロックを確実に渡す書き方
p 1, 3, 2, "2", "3".uniq { |n| n.to_s } # => 1, 3, 2
p (1, 3, 2, "2", "3".uniq do |n| n.to_s end) # => 1, 3, 2
result = 1, 3, 2, "2", "3".uniq do |n| n.to_s end
p result # => 1, 3, 2
参考URL
Rubyのパラメータと引数の対応付けを理解する(前編)|TechRacho by BPS株式会社
ブロックをdo…endで書くか{…}で書くかにより挙動が変わる例 - Qiita
#Rubyのブロックを学ぶ