例如
class C1
class Hash
def ok?
return 'nested hash ok'
end
end
def m1
return Hash.new.ok?
end
def m2
return {}.ok?
end
end
C1.new.m1 有效,但 C1.new.m2 无效。命名空间的不同含义是什么?
例如
class C1
class Hash
def ok?
return 'nested hash ok'
end
end
def m1
return Hash.new.ok?
end
def m2
return {}.ok?
end
end
C1.new.m1 有效,但 C1.new.m2 无效。命名空间的不同含义是什么?
您只需创建一个名为 的新类Hash
,嵌套在其中C1
。
您没有Hash
像预期的那样向 Ruby 的类添加方法。如果您愿意,请将其移出class Hash
并C1
重新运行:代码将按预期执行。
正如您当前的代码一样,假设您将嵌套类命名为MyThing
. 现在,你不会为了工作{}.ok?
而工作,对吗?
回顾一下:
这会起作用:
class Hash
def ok?
return 'non-nested hash ok'
end
end
class C1
def m1
return Hash.new.ok? #WORKS
end
def m2
return {}.ok? #WORKS
end
end
这将失败:
class C1
class MyThing
def ok?
return 'nested hash ok'
end
end
def m1
return MyThing.new.ok? #WORKS
end
def m2
return {}.ok? #FAILS
end
end
class C1
class Hash # defines C1::Hash
def ok?
return 'nested hash ok'
end
end
def m1
return Hash.new.ok? # refers to C1::Hash
end
def m2
return {}.ok? # refers to Hash
end
end
没有基于名称空间的类的混合。他们是分开的。