有一些Ruby類不允許在其實例上定義單例方法。例如,Symbol
:爲什麼不能在符號或修訂號上定義單例方法?
var = :asymbol
def var.hello
"hello"
end
# TypeError: can't define singleton method "hello" for Symbol
我想這可能是所有即時數據的限制,但它似乎爲nil
,true
工作,false
(但不Fixnum
或Bignum
實例):
var = true
def var.hello
"hello"
end
var.hello #=> "hello"
我不明白,爲什麼,爲什麼紅寶石允許對某些類的對象,但不是別人來定義單方法。
它似乎不只是'Fixnum's,但任何'數字'。 –
我的直覺反應是它有些事情要做,無論上下文如何,w /類型都是相同的值。符號':fred'將始終是同一個符號對象,就像'5'一樣。不幸的是,'true'也是如此,所以它比這更深;我首先想知道各版本是否相同,然後想知道每種類型的穩定性是如何實現的。 –
爲[對象#singleton_class](http://ruby-doc.org/core-2.3.0/Object.html#method-i-singleton_class)狀態,「如果接收機]'obj'是該文檔'nil' ,'true'或'false'分別返回'NilClass','TrueClass'或'FalseClass',如果'obj'是'Fixnum'或'Symbol',則會引發TypeError。正如@Andrew所指出的,然而,沒有數值可以有一個單獨的類。 'nil','true'和'false'具有單例類(例如'class << false; puts self; end#=> FalseClass'),但由於這些類只有一個實例,所以沒有必要區分類和單例類。 –