Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在迭代时启动实例变量_Ruby_Ruby On Rails 3 - Fatal编程技术网

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