我简化了以下代码所带来的问题:
def self.foo()
array = [0,3,5,10,4,6,9,7]
array.each do |arrayelement|
name = "Ruts" if arrayelement == 5
puts name
end
end
当数组的某个元素等于常量时,应该在变量中写入一个字符串。数组中的每个元素都是唯一的。问题是当arrayelement = 5时它将“Ruts”写入变量名,但是在每个循环的下一次迭代中,它用nil覆盖它。这是方法的输出。
nil
nil
Ruts
nil
nil
nil
nil
nil
如何在下一次迭代中更改我的代码,使变量name = Ruts而不是nil?
答案 0 :(得分:3)
您的代码可以修改如下:
name = nil
array.each do |arrayelement|
name = "Ruts" if !name && arrayelement == 5
puts name
end
name
#=> "Ruts"
然而,可以更有效地实现同样的目标:
name = 'Ruts' if array.include?(5)
#=> "Ruts"
答案 1 :(得分:1)
这是因为变量name = nil
array.each do |arrayelement|
name = "Ruts" if arrayelement == 5
puts name
end
是块的本地变量,并且每次都被定义。只需在外面宣布。
{{1}}