如果模型或控制器中有两个方法,并且想要在方法之间传递变量,例如
def foo
@param = 2
@test = 1
callee
#do something with @test
end
def callee
@test += @param
end
使用实例变量来执行此操作或常规变量(如此
)是否更好?def foo
param = 2
test = 1
test = callee(param, test)
#do something with test
end
def callee(param, test)
test += param
test
end
提前致谢!
答案 0 :(得分:2)
这个问题没有明确的答案,这在很大程度上取决于上下文 - 你需要问的是“哪种方法最能说明代码的意图”。你肯定应该对你正在讨论的模型/控制器类进行测试。
作为一个非常粗略的准则:
当方法是类的公共API的一部分并且它改变了类的实例的内部状态时,通常会看到第一种方法(尽管如果你有像公共方法一样链接的公共方法,它可能是代码味道的标志例如。)这可能会在模型对象中更常见。
第二种方法通常出现在你调用的方法是一个私有的方便方法,它会导致一些代码重复,或者一个方法对参数进行非常专业的操作并返回一些结果(在这种情况下它应该是被分解为实用类。)这可以在模型或控制器对象中看到。
如果您的目标是维护OO代码,那么SOLID设计的原则是非常好的指导原则 - 请看看Bob叔叔关于它们的文章:
http://blog.objectmentor.com/articles/2009/02/12/getting-a-solid-start
答案 1 :(得分:1)
这取决于您的需求。此外,您将变量传递给函数的原型也很重要。如果您希望该方法在未经您许可的情况下不更改任何参数,则应使用第二个实现。但是,如果您信任该函数,则可以使用第一种方法。这是一个很大的话题,称为“按引用调用”和“按值调用”。您可以查看以下链接;
http://www.exforsys.com/tutorials/c-language/call-by-value-and-call-by-reference.html