ruby - 为什么不能在 `singleton` `Fixnum` ,`Bignum` ,`Float` 类对象上定义 ,`Symbol` 方法,但 ` FalseClass` 和 `TrueClass` 可以有?

标签 ruby ruby-2.0

为什么不能在Fixnum,Bignum,Float,上定义singleton方法Symbol类对象,但是FalseClassTrueClass可以有吗?

C:\>ruby -v
ruby 2.0.0p0 (2013-02-24) [i386-mingw32]

C:\>irb --simple-prompt
DL is deprecated, please use Fiddle
11111111111.class
#=> Bignum
class << 11111111111 ; end
#TypeError: can't define singleton
#        from (irb):2
#        from C:/Ruby200/bin/irb:12:in `<main>'

1111.class
#=> Fixnum
class << 1111 ; end
#TypeError: can't define singleton
#       from (irb):4
#       from C:/Ruby200/bin/irb:12:in `<main>'

11.11.class
#=> Float
class << 11.11 ; end
#TypeError: can't define singleton
#       from (irb):6
#       from C:/Ruby200/bin/irb:12:in `<main>'

:name.class
#=> Symbol
class << :name ; end
#TypeError: can't define singleton
#       from (irb):8
#       from C:/Ruby200/bin/irb:12:in `<main>'

最佳答案

作为Ruby Docs说:

There is effectively only one Fixnum object instance for any given integer value, so, for example, you cannot add a singleton method to a Fixnum.

BignumFloatSymbol 也是如此

关于ruby - 为什么不能在 `singleton` `Fixnum` ,`Bignum` ,`Float` 类对象上定义 ,`Symbol` 方法,但 ` FalseClass` 和 `TrueClass` 可以有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15418576/

相关文章:

ruby-on-rails - 无法使用 Ruby 2.0 运行 Unicorn

ruby - 在 OS X Snow Leopard 上使用 RVM 安装 Ruby 2.0 时出错

正则表达式解析引用问题

ruby catch 和效率

ruby - 如何在 Enumerator::Lazy 方法中停止迭代?

ruby - Nokogiri 未安装?

ruby-on-rails-4 - Rails 4.0安装报错-require : cannot load such file -- active_support (LoadError)

ruby-on-rails - 方法 diff active/support ruby​​ 不工作

arrays - Ruby array.each 具有非唯一整数值

ruby - quote_char 导致适合 ruby​​ CSV 导入