迭代数组并正确使用yield

时间:2013-02-01 02:58:33

标签: ruby

我正在试图弄清楚如何在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"]

2 个答案:

答案 0 :(得分: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"]

答案 1 :(得分:0)

在这种情况下屈服没有意义,只需使用地图

[1,2,3,4].map{|x| x % 2 == 0 ? "Even" : "Odd" }