在ruby中,如何在定义全局变量时调用过程?

时间:2010-12-15 07:51:36

标签: ruby-on-rails ruby

签出ruby源代码时, 一些全局变量的访问可以是虚拟的。

我的意思是 define_global_variables_get("$a",some_get_procedure)define_global_variables_set("$a",some_set_procedure), 这样的事情,如果我没记错的话, 所以实际上有一些全局变量以这种方式访问 在那些巨大的红宝石全局变量中。

所以我的问题是,如何定义我的全局变量get / set 像红宝石代码那样?

1 个答案:

答案 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