如何在方法定义中分配可变数量的参数?

How do you assign a variable amount of arguments in method definition?

我有一个方法,它以一个索引作为第一个参数和数量可变的其他参数。我在我的代码中多次调用此方法,将 2-4 个附加参数传递给它,这些参数传递给 cells.

我的问题是,例如当我只需要传递 2 或 3 个参数时,最后一个 cells 未分配

def get_count(index,*args)
  if index == index
    live_count = 0
    if cells[args1].alive?
      live_count += 1
    end
    if cells[args2].alive?
      live_count += 1
    end
    if cells[args3].alive?
      live_count += 1
    end
    if cells[args4].alive?
      live_count += 1
    end
    return live_count
   end
  end

有没有一种优雅的方法可以在不破坏它的情况下仅传递我需要的参数数量?

编辑: 我在每个块中多次调用此方法

    cells.each_with_index do |cell, index|
      get_count(0,1,5,6)
      rules(cell, get_count(0,1,5,6))

      get_count(1,0,2,5,6)
      rules(cell, get_count(1,0,2,5,6))

它所做的是对每次迭代进行计数并执行 rules 中定义的函数。计数在每次迭代时重置。

这是在查看二维对象数组

[[0],[1],[2],[3],[4],
[5],[6],[7],[8],[9]]

在每个索引处,它对一组特定的其他索引执行计数。例如,在索引 0 处,它查看索引 1,5 和 6。然后它执行规则函数并继续在下一个索引处执行相同的操作。

我会遍历 args,这样你只检查实际给出的内容。

def get_count(index, *args)
  return unless index == index
  args.count { |arg| cells[arg].alive? }
end

请注意,index == index 始终是 true,所以我不确定为什么会在其中。


根据您的编辑,我假设您想在调用 get_count 时针对 index 变量评估传递的 index。这可以通过多种方式完成。我个人会在迭代块中保留迭代细节。这也使方法 get_count 更清晰。

def get_count(*args)
  args.count { |arg| cells[arg].alive? }
end

cells.each_with_index do |cell, index|
  rules(cell, get_count(1,5,6)) if index == 0
  rules(cell, get_count(0,2,5,6)) if index == 1
end