の場合map
、ブロック内にあるものを実行し、 とputs
同じように実行each
しますが、puts ステートメントの戻り値を配列に収集し、それを結果として返します。その結果は役に立たないので、その場合に map を使用しても意味がありません。s の配列を取得しますnil
。それぞれが結果を収集せずにブロック内の内容を実行します。
each
ブロックを実行し、元の配列を返します。
> a = ["kevin","john","ryan"]
=> ["kevin", "john", "ryan"]
> a.each {|i| puts i.upcase}
KEVIN
JOHN
RYAN
=> ["kevin", "john", "ryan"]
>
map
ブロックを実行し、ブロック内の値を配列で返します。
> a = ["kevin","john","ryan"]
=> ["kevin", "john", "ryan"]
> a.map {|i| puts i.upcase}
KEVIN
JOHN
RYAN
=> [nil, nil, nil]
>
nil
それぞれが a をputs
返し、それらnil
をmap
収集したため、返された の配列に注意してください。大文字の文字列を配列に集めたい場合は、次のmap
ように適切に使用します。
> a.map {|i| i.upcase}
=> ['KEVIN', 'JOHN', 'RYAN']
または、同等に、a.map(&:upcase)
. 変数に代入することもできます:
> foo = a.map {|i| i.upcase}
=> ['KEVIN', 'JOHN', 'RYAN']
> foo
=> ['KEVIN', 'JOHN', 'RYAN']