ruby方法返回值的最佳实践

Kev*_*ell 4 ruby

我发现自己要做很多事情来定义ruby方法的返回值:

def foo
  val = (some expression)
  val
end
Run Code Online (Sandbox Code Playgroud)

这似乎有点做作.这里的最佳做法是什么?

Dan*_*nne 11

除非(某些表达式)很重并且将被多次调用,否则不必将其保存到变量中.在这种情况下,您可能希望缓存它.

我会选择:

def foo
  (some expression)
end
Run Code Online (Sandbox Code Playgroud)

或用于缓存:

def foo
  @val ||= (some expression)
end
Run Code Online (Sandbox Code Playgroud)


Phr*_*ogz 9

注意,Ruby 1.9的,你可以使用Object#tap保存的值在年底返回,如果你需要返回之前做别的事情与价值:

def foo
  (some expression).tap do |val|
    # use val here
  end
  # The return value of the tap is _val_
  # and hence the return value of your method
end
Run Code Online (Sandbox Code Playgroud)