如何在方法定义中分配可变数量的参数?
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
我有一个方法,它以一个索引作为第一个参数和数量可变的其他参数。我在我的代码中多次调用此方法,将 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