Re: [問題] 請問 Fixnum 為什麼不支援 :next! 呢?

作者: johnlinvc (阿翔)   2014-05-30 00:27:13
※ 引述《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>
: 以上,謝謝。
作者: AIGecko (師大貓耳控)   2014-05-30 03:10:00
立即值如Fixnum,true,false,nil沒有建構子這就是immutable的意思吧 會指向唯一物件
作者: hcmlinj (接米)   2014-05-30 08:58:00
原來如此,感謝^^
作者: rexkimta (冷杉林)   2014-06-07 09:54:00
所以說SYMBOL應該也不行囉?
作者: AIGecko (師大貓耳控)   2014-06-08 20:58:00
Symbol也是唯一的存在

Links booklink

Contact Us: admin [ a t ] ucptt.com