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