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
作为实例变量。这样做的正确方法是什么?
答案 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
在现实生活中,最佳做法是尽可能避免使用实例变量,并跨方法传递所有内容。这可能会为您节省未来的调试时间。