我有一段代码,如果需要,应该在运行时再次进行评估。
class Test
def initialize
@some_block = nil
end
def make_initial_attributes(&block)
# do stuff with the supplied block, and then store the block somewhere
# for later
end
def rebuild_attributes
# grab that stored block and evaluate it again
end
end
我有在启动时创建的Test对象,但是在整个程序中,我可能希望它们通过在启动时运行我所提供的任何块来“更新”自己。
也许程序的状态已经改变,所以这些Test对象会愉快地检查一堆东西,并让他们决定用什么来更新它们的值。当然,块是我写的(我认为)他们不应该做我没有计划的事情......
这个例子有点奇怪。基本上可以存储一段代码(这只是我相信的Proc),然后再重新评估它。
答案 0 :(得分:4)
您要求的是具体的块。您只需对存储的块使用“调用”即可。这是一个例子:
class Test
def initialize
@some_block = nil
end
def make_initial_attributes(&block)
@some_block = block
# do stuff with the supplied block, and then store the block somewhere
# for later
end
def rebuild_attributes
@some_block.call(1)
# grab that stored block and evaluate it again
end
end
test = Test.new
test.make_initial_attributes do |i|
puts i
end
test.rebuild_attributes # 1
test.make_initial_attributes do |i|
puts i+1
end
test.rebuild_attributes # 2
答案 1 :(得分:2)
也许我错过了一些东西,但为什么不在你的实例变量中存储block
:
def make_initial_attributes(&block)
@some_block = block
end
然后,由于block
是Proc
,只有call
它:
def rebuild_attributes
@some_block.call
end