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
的內部。
您沒有像預期的那樣向Ruby的Hash
類添加方法。 如果你想這樣做,請將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
通過指定全局命名空間,您可以在'C1'內編輯內建的'Hash'類。 'class :: Hash' – Max 2013-03-07 05:08:11
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
沒有基於命名空間的類混合。他們是分開的。
如果我想要的是添加方法「好嗎?」轉換爲散列,但只適用於C1類,它是子類。如何做到這一點? – Yehudi 2013-03-07 03:45:01