Ruby で Enumerable をループする方法はたくさんあるようです。each
、foreach
、または in collect
、map
または他の同様の方法に違いはありますか?
または、特定の状況で特定の方法を使用してはいけない理由はありますか?
andを使用するpry
とRubinus
(Ruby コードが読みやすくなります)、自分の目で確かめてください。
$ pry
[1] pry(main)> cd Enumerable
[2] pry(Enumerable):1> show-method collect
From: .../rbx-head/kernel/common/enumerable18.rb @ line 4:
Owner: Enumerable
Visibility: public
Number of lines: 9
def collect
if block_given?
ary = []
each { |o| ary << yield(o) }
ary
else
to_a
end
end
[3] pry(Enumerable):1> show-method map
From: .../rbx-head/kernel/common/enumerable18.rb @ line 4:
Owner: Enumerable
Visibility: public
Number of lines: 9
def collect
if block_given?
ary = []
each { |o| ary << yield(o) }
ary
else
to_a
end
end
[4] pry(Enumerable):1>
だから、これらの2つではありません。
map
コレクションをcollect
反復処理します。オブジェクトごとにブロックを実行し、結果を収集します。メソッドはeach
結果を収集しません
Array#collect
(およびArray#map
) ブロックで渡されたコードに基づいて新しい配列を返します。 Array#each
配列の各要素に対して (ブロックで定義された) 操作を実行します。
私はcollect
このように使用します:
array = [1, 2, 3]
array2 = array.collect {|val| val + 1}
array.inspect # => "[1, 2, 3]"
array2.inspect # => "[2, 3, 4]"
そしてeach
、このように:
array = [1, 2, 3]
array.each {|val| puts val + 1 }
# >> 2
# >> 3
# >> 4
array.inspect # => "[1, 2, 3]"