如何避免通过多个方法传递相同的参数

时间:2018-06-13 06:26:24

标签: ruby

def foo(a)
  # some computation
  bar(a, b)
end

def bar(a,b)
  # some computation
  baz(a, b, c)
end

def baz(a, b ,c)
  print a
end

如何避免将相同的参数(a)传递给所有方法?一种方法是将参数a作为实例变量。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

没有一种解决方案适用于所有情况,并且通常明确地传递参数只是最佳选择,尤其是在调试方面。

您可以使用实例变量,但我不会引入新的实例变量,唯一的原因是不要避免将其传递给调用链。它还应该有自己的价值。

我可以在项目中经常看到的一种方法是给我们一个参数哈希,其中添加了新参数:

def foo(a)
  ....
  bar({a:a, b:b})
end

def bar(par)
  ....
  par[:c] = c
end

def baz(par)
   par[:a]+par[:b]+par[:c]
end

这也不是没有缺点。例如,如果您忘记“添加”必要的参数,这将产生错误的结果或抛出异常(取决于如何使用它们),同时通过参数列表显式遗忘它们,将在编译时找到

我会根据所涉及的参数列表的长度做出决定。如果方法的参数数量大于5,我会开始思考,不同的设计是否更合适。

答案 1 :(得分:-1)

回答所述问题:是的,ruby是一种有状态的OO语言, 可变的一切。所以在ruby中可能会引入实例变量

class MyClass
  def foo(a)
    @a = a
    # some computation
    bar(b)
  end

  def bar(b)
    @b = b
    # some computation
    baz(c)
  end

  def baz(c)
    print [@a, @b, c].inspect
  end
end

在现实生活中,最佳做法是尽可能避免使用实例变量,并跨方法传递所有内容。这可能会为您节省未来的调试时间。