Ruby 什么';String和::String之间的区别是什么?
我知道Ruby 什么';String和::String之间的区别是什么?,ruby,Ruby,我知道::允许我们访问模块中的项目,或类中的类级项目,但仅::String意味着什么 String==“hi.class和::String==“hi.class”之间有什么区别 该类的定义如下 类字符串 end这意味着“从顶级名称空间访问字符串常量” 类字符串可能在某些模块中定义-这将告诉解释器访问顶级名称空间中的类。在Stringvs::String的特定情况下,答案是:几乎不会有差异 在常量Xvs:X的一般情况下,请确定X可能是A::B::C::X或A::B::X或justX,但是::X始终
::
允许我们访问模块中的项目,或类中的类级项目,但仅::String
意味着什么
String==“hi.class
和::String==“hi.class
”之间有什么区别
该类的定义如下
类字符串
end这意味着“从顶级名称空间访问字符串常量”
类字符串可能在某些模块中定义-这将告诉解释器访问顶级名称空间中的类。在
String
vs::String
的特定情况下,答案是:几乎不会有差异
在常量X
vs:X
的一般情况下,请确定X
可能是A::B::C::X
或A::B::X
或justX
,但是::X
始终是“justX
”,而普通的“X
”可以是其中任何一个
String
非常重要,因此没有人会意外地重新定义它。在不太可能的情况下,定义了名为String
的内部类或模块,很可能是包含代码的意图使用它,而不是String
,err,sorry,::String
更新:我应该简单地添加查看
类字符串;end
并没有定义类字符串
,我认为这是你的意思。在Ruby中,类可以重新打开。class
关键字可能引入也可能不引入新类。它可能只是将行为添加到现有的行为中,如果其中没有任何内容,那么它只是一个禁止操作。旧的类行为仍然存在,::String
引用顶级String
类<代码>字符串引用当前命名空间或以上命名空间中的字符串
请看下面的代码:
module MyModule
class String
def initialize(s); end
def split(operator=nil)
puts "This string doesn't split"
end
end
class SomeClass
def bar
s = String.new("foo:bar")
s.split(":")
end
def foo
s = ::String.new("foo:bar")
s.split(":")
end
end
end
sc = MyModule::SomeClass.new
sc.foo
=> ["foo", "bar"]
sc.bar
This string doesn't split
=> nil
由于顶级命名空间和模块MyModule
中都存在String
,因此需要使用顶级命名空间:
显式引用顶级字符串