小编Joh*_*aou的帖子

Ruby 以编程方式调用方法,具有可变数量的 args

我正在尝试做类似的事情:

def foo(mode= :serial)

  if (mode == :serial) then
    self.send(:bar, "one_type")
  else
    self.send(:bar,"second_type",:T5)
  end
end
Run Code Online (Sandbox Code Playgroud)

我显然可以这样输入。

但我最近尝试将其扩展为包含这样的第二个功能:

def foo(mode= :serial)

  if (mode == :serial) then
    self.send(:bar, "one_type")
    self.send(:foobar, "one_type",20)
  else
    self.send(:bar,"second_type",:T5)
    self.send(:foobar, "one_type",20,:T5)
  end
end
Run Code Online (Sandbox Code Playgroud)

我仍然可以按原样继续,但我对自己想,这里有一个模式,我应该将参数抽象到另一个层中并使这更简单。

所以我想做的是这样的:

arg_arr   = [:bar, "one_type"]
arg_arr_2 = [:foobar, "one_type", 20]
if (mode == :serial) then
  self.send(arg_arr)
  self.send(arg_arr_2)
else
  arg_arr << :T5
  arg_arr2 << :T5
  self.send(arg_arr)
  self.send(arg_arr2 )
end
Run Code Online (Sandbox Code Playgroud)

我尝试了一些涉及 .each、.inspect 的其他想法,但没有任何效果(通常的错误是无法将数组转换为字符串,我猜这是指它将数组视为整个函数名称的事实) . 如果我明确说“使用数组元素[0]、[1]等,我可以做到,但这似乎很浪费。

有没有办法在不编写硬编码到参数数量的代码的情况下实现这一目标?

ruby instance-method programmatically

6
推荐指数
1
解决办法
2021
查看次数

标签 统计

instance-method ×1

programmatically ×1

ruby ×1