Mik*_*yth 1 ruby syntax structure class
为什么这不起作用?
module XT
puts Fixnum.class # So we're sure to re-open the Fixnum class
class Fixnum
def hi
puts "HI from module XT"
end
end
end
Run Code Online (Sandbox Code Playgroud)
在要求并加载模块后,该hi方法仍未添加到Fixnum中.如果我删除模块包装器,它可以工作.
正如@Jeremy所写,常量是由模块命名的,定义一个类实际上只是将一个类对象赋给一个常量.基本上,
class Fixnum; end
Run Code Online (Sandbox Code Playgroud)
是(大致)相当于
Fixnum = Class.new
Run Code Online (Sandbox Code Playgroud)
(除非事实如果Fixnum已经存在,前者将重新打开它,而后者将覆盖它).
这意味着如果您在模块(或类,因为类IS-A模块)Fixnum内部执行此操作,则常量将在该模块内进行命名空间.
如果你想显式访问顶级常量,你可以告诉Ruby在顶层开始查找,就像你告诉Unix在顶层启动文件系统查找一样:
module XT
class ::Fixnum; end
end
Run Code Online (Sandbox Code Playgroud)