签出ruby源代码时, 一些全局变量的访问可以是虚拟的。
我的意思是define_global_variables_get("$a",some_get_procedure)
,
define_global_variables_set("$a",some_set_procedure)
,
这样的事情,如果我没记错的话,
所以实际上有一些全局变量以这种方式访问
在那些巨大的红宝石全局变量中。
所以我的问题是,如何定义我的全局变量get / set 像红宝石代码那样?
答案 0 :(得分:2)
您想要一个全局变量,在访问时,它会评估您的代码以获取变量的值?你可以做到这一点。你会想要promise宝石。
#!/usr/bin/ruby1.8
require 'promise'
$a = promise do
puts "generating value of $a"
123
end
这会将$ a设置为块的结果,但在实际访问$ a之前不会执行该块。让我们第一次访问它:
puts $a
# => generating value of $a
# => 123
第二次访问它将返回缓存的值,因此不会再次调用该块:
puts $a
# => 123