我通常用“一次分配”(真的不知道怎么称呼这个ANW)的红宝石这样的:红宝石一次分配变量
class FooBar
def foo
@foo ||= begin
# Costly operation putting here
end
end
end
这将允许可变@foo
是只计算一次,然后在方法foo
的后续调用中直接使用。我的问题是:
- 是使用
begin
/end
块在这种情况下,好还是不好,因为文档指出它是用于封装例外,没有提到任何其他用途。 - 我可以使用其他的块类型(Proc,Lambda,
do
/end
)吗?如果是,那么如何?
http://en.wikipedia.org/wiki/Memoization – bjhaid
这是正常的'initialize'完成,但可以在任何地方进行。是的,'@ foo'可以指向任何类型操作的结果:'@foo = arr.map ...','@foo = if..else ... end','@foo = lambda .. .'等 –
一旦给出了评论或答案,请不要更改您的代码,因为它可能会使后者变得毫无意义。最好将它保持原样并添加一个注释(作为编辑,而不是注释),解释您的意图,最好使用单词“编辑”,例如“编辑:...”。 –