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