在方法之间传递数据时的正确技术

时间:2012-07-24 07:38:42

标签: ruby-on-rails ruby

如果模型或控制器中有两个方法,并且想要在方法之间传递变量,例如

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

提前致谢!

2 个答案:

答案 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