Ruby 在迭代时启动实例变量
假设我们的控制器中有一个循环,它通过一个数字数组,检查它们是偶数还是奇数:Ruby 在迭代时启动实例变量,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,假设我们的控制器中有一个循环,它通过一个数字数组,检查它们是偶数还是奇数: [1,2,3,4,5].each do |number| if number.odd? @odd_count += 1 else @even_count += 1 end end 我的问题是,是否有一种方法可以在不事先设置@odd_count和@偶数_count变量的情况下执行此数组?如果在控制器中执行上一个代码块,则 undefined method `+' for nil:NilClas
[1,2,3,4,5].each do |number|
if number.odd?
@odd_count += 1
else
@even_count += 1
end
end
我的问题是,是否有一种方法可以在不事先设置@odd_count和@偶数_count变量的情况下执行此数组?如果在控制器中执行上一个代码块,则
undefined method `+' for nil:NilClass
但我真的不想这样做
@odd_count = 0
@even_count = 0
在循环之前,因为它是额外的代码行,看起来不好。为了回答这个问题,假设我们有10件不同的东西要计算,而不是2件。好的,如果我理解正确,请替换:
@odd_count += 1
与:
好的,如果我理解正确,请更换:
@odd_count += 1
与:
你确定实例变量真的是你想要的吗?是的,我想知道这个理论情况的答案。解决这个问题的一种方法是使用散列,然后只需初始化一次..你可以使用
@odd\u count=@odd\u count.to_i.success
而不是@odd\u count+=1
你确定实例变量真的是你想要的吗?是的,我想知道这个理论情况的答案。解决这个问题的一种方法是使用散列,然后只需初始化一次..你可以使用@odd\u count=@odd\u count.to\u i.succ
而不是@odd\u count+=1
,如果我们有10个变量要设置,而不是两个,这就不起作用了。如果你有很多这样的实例变量,为什么不使用散列呢?变量的名称是什么@divisible\u by_2\u count
,@divisible\u by_3\u count
,@divisible\u by_4\u count
…?是的,哈希是一个选项,但我想知道是否有可能在为实例变量赋值时初始化它。这就是问题所在。@test,它会的nil.to#i#=>0
。我在IRB中使用jruby 1.7.18、MRI 2.2.2、MRI 1.9.3尝试了这一点-所有这些都很好。如果我们想要设置10个变量,而不是两个,那么这就不起作用了。如果你有很多这样的实例变量,为什么不使用散列呢?变量的名称是什么@divisible\u by_2\u count
,@divisible\u by_3\u count
,@divisible\u by_4\u count
…?是的,哈希是一个选项,但我想知道是否有可能在为实例变量赋值时初始化它。这就是问题所在。@test,它会的nil.to#i#=>0
。我在IRB中使用jruby 1.7.18、MRI 2.2.2、MRI 1.9.3尝试了这一点-所有这些都很好。
@odd_count = (@odd_count || 0) + 1
a = [0,1,2,3,4,5,6,7,8,9,10]
odd = a.select {|n| n % 2 != 0}.inject(0) {|acc, n| acc + 1}
even = a.length - odd