【发布时间】:2012-09-30 20:53:57
【问题描述】:
我想避免在方法调用中重新评估值。到目前为止,我一直在这样做:
def some_method
@some_method ||= begin
# lot's of code
end
end
但它最终很丑陋。在某些代码中,我看到如下内容:
def some_method
@some_method ||= some_method!
end
private
def some_method!
# lot's of code
end
我不喜欢结尾的 bang (!),所以我想出了这个:
def some_method
@some_method ||= _some_method
end
private
def _some_method
# lot's of code
end
- 前置下划线是一个好的约定吗?
- 对于 memoized/non-memoized 方法对是否有其他约定?
- 是否有一些约定来记忆多行方法?
【问题讨论】:
-
相关:stackoverflow.com/questions/696338 使用 Rails 的类
ActiveSupport::Memoize似乎不错:railway.at/articles/2008/09/20/a-guide-to-memoization。 -
您期待什么样的答案? Vise 和 Agis 都提出了好的约定。此外,您的第二个代码块是一个通用约定。
-
我喜欢
||= begin...end。我觉得它很优雅。 -
由你决定.. __some_method, compute_some_method, calculate_some_method, some_method_impl, __some_method_code
-
注意:is a convention 关于何时以及为何使用感叹号。我认为这有点超出了公约的目的,但值得考虑。再次稍微偏离这里的相关内容,但coding by convention 具有价值,所以虽然说“我没有修改对象”很好,但说“我不喜欢爆炸”是一个不太好的理由来避免它。
标签: ruby coding-style memoization