2009-02-02 31 views
7

有没有办法访问Ruby中符号表中的所有内容?我希望能够序列化或以其他方式保存程序运行的当前状态。要做到这一点,似乎我需要能够迭代范围内的所有变量。如何访问Ruby中的符号表?

+1

如果你不介意我问,你用这个呢? – Geo 2009-02-02 19:03:14

+0

我为此使用它:http://stackoverflow.com/questions/199603/how-do-you-stringize-serialize-ruby-code基本上,没有人回答我的问题够好,所以在提供赏金之前会让我失去代表),我想我会把它分解成这个子问题,并自己找出答案。 – 2009-02-02 22:27:10

回答

6

我认为他来自于perl背景,他希望获得脚本中定义的所有变量并对它们进行序列化。这样,当他加载文件时,他会让他们回来。 我仍然在搜索如何获取变量列表,但序列化将使用Marshal.dump进行,并且使用Marshal.load进行读取。一旦找到如何获得所有已定义变量的列表,我将编辑帖子。

编辑:发现它!

你可以通过调用这些方法获得的所有变量的列表:

 
local_variables 
global_variables 

如果你还没有得到你的序列化代码,我建议是这样的:

  • 创建一个类或一个Struct实例,它包含变量名和变量的值并将它们添加到数组中:
 

local_variables.each {|var| my_array << MyVarObject.new(var,eval(var)) } # eval is used to get the value of the variable 
 

,然后序列化数组:


data = Marshal.dump(my_array) 
File.open("myfile.ser","w") do |file| 
    file.puts data 
end
0

我不相信有,但你总是可以使用marshall转储/加载。

4

如果我有正确的理解你的问题 - 你想看到你的程序中所有的符号,然后下面应该做的伎俩:

puts Symbol.all_symbols.inspect 

的“all_symbols”类方法会返回数组当前在程序中的每个符号。

+0

是的,这是真的。有趣的是,它返回的符号还没有定义好:`ZZZ`没有被定义。 `ZZZ; Symbol.all_symbols`包含`ZZZ`。 – 2015-07-07 00:26:00