ruby – 为什么迭代内部和外部的对象不同?
发布时间:2020-12-17 02:45:22 所属栏目:百科 来源:网络整理
导读:我将一个类分配给一个常量Foo,并将Foo重新分配给其他东西: class Foo; endFoo = nil 在主环境中,Foo引用新分配的对象: p Foo # = nil 但是,在某种迭代中,(我不确定是哪种),Foo引用了前一个对象: ObjectSpace.each_object(Class).select{|c| c.name == "Fo
我将一个类分配给一个常量Foo,并将Foo重新分配给其他东西:
class Foo; end Foo = nil 在主环境中,Foo引用新分配的对象: p Foo # => nil 但是,在某种迭代中,(我不确定是哪种),Foo引用了前一个对象: ObjectSpace.each_object(Class).select{|c| c.name == "Foo"} .each{|c| p c,c.instance_of?(Class)} # => Foo true 为什么是这样? 解决方法
将nil分配给常量Foo不会影响创建的类.它仍然存在,虽然你不能再用Foo引用它(除非你再次将类对象重新分配给Foo).
class Foo; end Foo.object_id # => 70210590718440 Foo = nil Foo.object_id # => 4 Foo = ObjectSpace._id2ref(70210590718440) Foo.object_id # => 70210590718440 关于名称,创建一个类: class Foo; end Foo.name # => "Foo" 将它分配给foo,就像: Foo = Class.new Foo.name # => "Foo" 它也设置了它的名字,但这不会使它成为一个类.您也可以创建没有名称的类: foo = Class.new foo.name # => nil 将未命名的类分配给常量设置其名称: Bar = foo foo.name # => "Bar" 设置后,它不会更改: Baz = foo foo.name # => "Bar" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 机器学习中正则化项L1和L2的直观理解
- ruby-on-rails – Ruby on Rails:在form_for中作为参数的符
- NoSQL如何执行水平扩展以及它如何比RDBMS扩展更有效
- c# – WPF UIElement.IsHitTestVisible = false;仍然返回命
- swift protocol optional可选方法
- c# – 使用System.Diagnostics.Process启动Jar文件
- Accordion 、ViewStack、TabNavigator 导航组件
- 【XML系列】-----XML文档格式(一)
- 如何为Wix刻录引导程序exepackage添加依赖文件夹
- 不应该在where子句中使用聚合函数