好的,Ruby大师,这在标题中难以描述,所以请耐心等待这个解释:
我希望传递一个表示变量的字符串:不是实例,不是构成对象的属性集合,而是实际变量:对象的句柄。
这样做的原因是我正在处理可以位于文件系统,网络或内存中的资源。我想创建一个URI处理程序,它可以以一致的方式处理这些中的每一个,所以我可以有像例如。
这样的方案你明白了。这是我想要弄清楚的最后一个:有没有办法在Ruby中获取对象的引用的字符串表示,然后使用该字符串来创建新的引用?我真的很感兴趣编组引用,而不是对象。理想情况下会有类似于Object#object_id
的东西,这很容易获得,并且使用它来创建一个引用同一个对象的新变量。我知道这可能非常脆弱,因此是一个不寻常的用例:它只能在一个Ruby进程中工作,只要有一个现有的变量来保持对象不被垃圾收集,但这些都适用于我正在开发inmemory
计划。
我能想到的唯一选择是:
还有其他什么想法,StackOverflowers?
答案 0 :(得分:4)
有ObjectSpace._id2ref
:
f = Foo.new #=> #<Foo:0x10036c9b8>
f.object_id #=> 2149278940
ObjectSpace._id2ref(2149278940) #=> #<Foo:0x10036c9b8>
除了关于垃圾收集的警告ObjectSpace
在jruby中带来了很大的性能损失(以至于它默认禁用)
答案 1 :(得分:1)
变量不是Ruby中的对象。你不仅不能编组/解组它们,你不能用它们做任何事情。您只能对对象执行某些操作,而不是哪些变量。
(如果他们是对象,那么真的很好!)
答案 2 :(得分:0)