我启动了 irb,然后输入:
类点
结尾
然后我又输入了一遍,但添加了一些其他内容。
Irb 并没有抱怨我正在定义一个已经存在的类。
实际上你并没有重新定义Point类,而是重新打开了它。一个小代码片段来说明差异:
class Point
def foo
end
end
class Point
def bar
end
end
Now Point
有两种方法:foo
and bar
。所以第二个定义Point
它没有取代以前的定义,而是添加到它的基础上。这在 ruby 脚本和 irb 中都是可能的(也可以使用标准库中的类,而不仅仅是您自己的类)。
也可以通过使用来真正重新定义类remove_const
首先删除类名的先前绑定:
class Point
def foo
end
end
Object.send(:remove_const, :Point)
class Point
def bar
end
end
Point.instance_methods(false) #=> ["bar"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)