-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

要使用 yield 你必须通过一个块。

你可以使用{}积木

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 回答