3

Ruby で Enumerable をループする方法はたくさんあるようです。eachforeach、または in collectmapまたは他の同様の方法に違いはありますか?

または、特定の状況で特定の方法を使用してはいけない理由はありますか?

4

3 に答える 3

1

andを使用するpryRubinus(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結果を収集しません

于 2013-04-05T22:12:14.760 に答える
1

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]"
于 2013-04-05T22:10:06.117 に答える