Re: [問題] bug?

看板Ruby作者 (好2ˇ)時間13年前 (2011/05/27 21:07), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串2/3 (看更多)
哈, 剛看到也以為是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

05/27 21:10, , 1F
但是這樣在使用上會產生難以追蹤的bug...
05/27 21:10, 1F

05/27 21:10, , 2F
是不是要設法避免這種情形?
05/27 21:10, 2F

05/27 21:23, , 3F
這是Ruby, 你可以覆寫掉 to_s 和 to_i
05/27 21:23, 3F

05/27 21:23, , 4F

05/27 21:24, , 5F
這樣就避免這種情形發生啦... 哈哈
05/27 21:24, 5F

05/15 10:04, , 6F
'2'.to_i 4 是將 4 進位的 '2' 轉成 10 進位的數字
05/15 10:04, 6F
文章代碼(AID): #1Dtw84cX (Ruby)
討論串 (同標題文章)
本文引述了以下文章的的內容:
2
7
13年前, 05/27
完整討論串 (本文為第 2 之 3 篇):
2
7
13年前, 05/27
2
6
2
4
文章代碼(AID): #1Dtw84cX (Ruby)