※ 引述《hcmlinj (接米)》之铭言:
: 请教一下各位大大
: 为什么 Fixnum 不支援 :next! 呢?
: String 是有支援的
重点在于这个!
5.next 是会正常执行的。
看完Doc http://www.ruby-doc.org/core-2.1.2/Fixnum.html
就会发现Fixnum 没有任何!结尾的method
因为 Fixnum 和 Bignum 是 immutable 的,而String 不是
换句话说就是物件一旦成立,物件的内容就不能够修改。
为什么要这样呢?
考虑下面这个case
x = 42
y = x
x.next!
如果Fixnum 支援!这种修改内容的method 的话,最后y 的也会跟着改变,不太直觉。
: 以下是在 irb 的执行状况
: irb(main):001:0> i = 0
: => 0
: irb(main):002:0> i.next!
: NoMethodError: undefined method `next!' for 0:Fixnum
: from (irb):2
: from /usr/bin/irb:12:in `<main>'
: irb(main):003:0> i
: => 0
: irb(main):004:0> i = "0"
: => "0"
: irb(main):005:0> i.next!
: => "1"
: irb(main):006:0> i
: => "1"
: irb(main):007:0>
: 以上,谢谢。