为什么不能在Symbols或Fixnums上定义单例方法?

sfe*_*rik 26 ruby

有一些Ruby类不允许在其实例上定义单例方法.例如,Symbol:

var = :asymbol

def var.hello
  "hello"
end

# TypeError: can't define singleton method "hello" for Symbol
Run Code Online (Sandbox Code Playgroud)

我想这可能是所有即时数据的限制,但它似乎对工作nil,truefalse(但不实例FixnumBignum):

var = true

def var.hello
  "hello"
end

var.hello #=> "hello"
Run Code Online (Sandbox Code Playgroud)

我不明白为什么Ruby允许在某些对象类而不是其他对象上定义单例方法.

Pin*_*nyM 20

该公司与一家名叫描述"立即值"的概念做这里的马茨.

事实上,没有立即值应该允许单例方法.然而,在的情况下true,falsenil,其实有单类,备份这些值(或值实际上是单例类-我不知道这个).因此,您可以将单例实例添加到支持类,该类显示就像值本身一样.数字和符号实例不是单例(显然)并且无处可以保持单例方法.