【发布时间】:2015-01-16 18:54:34
【问题描述】:
我正在尝试编写这两种方法,以便您可以轻松地在lazy 和eager 之间切换。
例如:
class Foo
lazy :bar do
"@bar was initializated lazily"
end
eager :bar2 do
"@bar2 was initializated eagerly"
end
end
f = Foo.new
puts f.bar
# @bar was initializated lazily
puts f.bar2
# @bar2 was initializated eagerly
lazy 方法有点简单。它使用具有该名称的attr_reader方法创建一个''getter''。并使用块的评估初始化变量。 这只发生在您第一次调用“getter”时。
但是现在我必须编写eager 方法,这根本不容易,至少对我来说是这样。因为,这种方法必须强制 initialize 评估 eager 块的指令 AFTER 初始化完全完成,我不知道。
我已经尝试在每个eager 块中扩展initialize,但它尚未初始化的对象,所以这不起作用。你有什么主意吗?现在我正在考虑扩展new 方法,以便它调用另一个方法,该方法有一堆块可以正确评估和分配。但我觉得这样做有点冒险。
【问题讨论】:
标签: ruby lazy-loading eager-loading