看板 Ruby 關於我們 聯絡資訊
哈, 剛看到也以為是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:https://gist.github.com/995234 05/27 21:23
ihower:這樣就避免這種情形發生啦... 哈哈 05/27 21:24
iForests:'2'.to_i 4 是將 4 進位的 '2' 轉成 10 進位的數字 05/15 10:04