作者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
1F:推 leondemon:但是这样在使用上会产生难以追踪的bug... 05/27 21:10
2F:→ leondemon:是不是要设法避免这种情形? 05/27 21:10
3F:→ ihower:这是Ruby, 你可以覆写掉 to_s 和 to_i 05/27 21:23
5F:→ ihower:这样就避免这种情形发生啦... 哈哈 05/27 21:24
6F:推 iForests:'2'.to_i 4 是将 4 进位的 '2' 转成 10 进位的数字 05/15 10:04