作者ihower (好2ˇ)
看板Ruby
標題Re: [問題] bug?
時間Fri May 27 21:07:13 2011
哈, 剛看到也以為是bug, 但是很可惜... 不是bug... XD
首先, Ruby 的方法呼叫是可以用空白來省略括號的
所以 '2'.to_i *4 被 Ruby parser 解析成 '2'.to_i(*4)
又參數列中用*開頭也是合法, 那是不定參數列的意思
而to_i和to_s傳參數是換基底的意思, 可傳2進位到36進位
所以 '2'.to_i *4 是求 2 的四進位 =>還是 2
2.to_s *2 是求 2 的二進位 => 變成 "10"
不信你傳 2.to_s *1 或 2.to_s *37 就爆炸了, 會出現 invalid radix
※ 引述《leondemon (狗狗)》之銘言:
: 環境:1.9.2
: 狀況:
: 用space分隔下面的operation且列印出來
: p '2'.to_i*4
: p '2'.to_i *4
: p '2'.to_i * 4
: Results:
: => 8
: => 2
: => 8
: *******************************
: 相同的狀況,把integer換成string
: p 2.to_s*2
: p 2.to_s *2
: p 2.to_s * 2
: Results:
: => 22
: => 10
: => 22
: 第二個是本來就會這樣 還是bug?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.240.174.24
推 leondemon:但是這樣在使用上會產生難以追蹤的bug... 05/27 21:10
→ leondemon:是不是要設法避免這種情形? 05/27 21:10
→ ihower:這是Ruby, 你可以覆寫掉 to_s 和 to_i 05/27 21:23
→ ihower:這樣就避免這種情形發生啦... 哈哈 05/27 21:24
推 iForests:'2'.to_i 4 是將 4 進位的 '2' 轉成 10 進位的數字 05/15 10:04