-1

Rubyで配列を反復処理し、値に基づいてアクションを実行する方法を理解しようとしています(そして、使用方法を理解しようとしていますyield。以下は、これまでのコードですが、機能していません。誰かが私を指摘するのを手伝ってもらえますか?正しい方向に?

each_odd("Odd")

def each_odd
  array = [1, 2, 3, 4]
  array.map {|x| 
   if (x % 2 != 0) do x = yield 
   else x = "Even"
   end}
end

私はこれが次の配列を返すことを期待しています:["Odd", "Even", "Odd", "Even"]

4

2 に答える 2

2

イールドを使用するには、ブロックを渡す必要があります。

そして、あなたは{}ブロックを使うことができます

each_odd { 'Odd' } #=> ["Odd", "Even", "Odd", "Even"]

またはdo .. endブロック

each_odd do
  'Odd'
end
#=> ["Odd", "Even", "Odd", "Even"]

そしてここにメソッドを実装する方法があります

def each_odd
  [1, 2, 3, 4].map do |x| 
    (x % 2 != 0) ? yield(x) : 'Even'
  end
end

呼び出されるyieldと、ブロック内の内容を評価してコンテキストに返します。また、次のようにパラメーターをブロックに渡すこともできます。

yield(x)

そして、あなたは次のようなことをすることができます

each_odd { |num| "#{num} is Odd" } #=> ["1 is Odd", "Even", "3 is Odd", "Even"]
于 2013-02-01T03:06:26.047 に答える
0

この場合、譲歩しても意味がありません。マップを使用するだけです。

[1,2,3,4].map{|x| x % 2 == 0 ? "Even" : "Odd" }
于 2013-02-01T03:06:36.867 に答える