gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:27:45 26 4
gpt4 key购买 nike

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

var = :asymbol

def var.hello
"hello"
end

# TypeError: can't define singleton method "hello" for Symbol

我认为这可能是对所有立即值的限制,但它似乎适用于 niltruefalse(但不是 FixnumBignum 的实例):

var = true

def var.hello
"hello"
end

var.hello #=> "hello"

我不明白为什么 Ruby 允许在某些类的对象上定义单例方法,但不允许在其他类上定义单例方法。

最佳答案

这与描述的“立即值”概念有关 here作者:Matz。

事实上,任何立即值都不应该允许单例方法。但是,在 truefalsenil 的情况下,实际上有单例类支持这些值(或者值实际上是单例类——我对此不确定)。因此,您可以将单例实例添加到支持类中,这就好像它是值本身一样。 Numeric 和 Symbol 实例不是单例(显然)并且无处保存单例方法。

关于ruby - 为什么不能在 Symbols 或 Fixnums 上定义单例方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13962147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com