※ 引述《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>
: 以上,謝謝。