我以为Ruby会自动转换为Bignum。我在这里找到了确认
然而,这并没有发生:
ruby 1.8.7 (358) [universal-darwin12.0]
>> 2 ** 62
=> 4611686018427387904
>> 2 ** 63
=> -9223372036854775808 #why minus - how about automatic Bignum conversion?
>> 2 ** 64
=> 0 #- how about automatic Bignum conversion?
使用更新的Ruby版本
Ruby 1.8.7(用互联网术语来说(是古老的。使用更新的内容。例如:
[1] pry(main)> RUBY_VERSION
=> "2.0.0"
[2] pry(main)> 2 ** 63
=> 9223372036854775808
[3] pry(main)> 2 ** 64
=> 18446744073709551616
这可能是旧版本Ruby中的一个错误。切换到新版本,问题就消失了。今天是Ruby 2.0的发布日。Ruby 1.8很快就会死了。在我的Ruby 1.9.3上,我只是做了2**1000000
,没有任何问题,只是它持续了一段时间,所以我不得不终止它
很可能是您使用的构建所特有的错误。例如,当我执行ruby -v
时,我得到:
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin12.2.1], MBARI 0x6770, Ruby Enterprise Edition 2011.03
在irb
会话中,我得到:
1.8.7 :006 > 2 ** 64
=> 18446744073709551616
1.8.7 :007 > (2 ** 64).class
=> Bignum
1.8.7 :008 > RUBY_VERSION
=> "1.8.7"
如果我使用较新的版本,我也不会遇到这个问题。如果你能发布ruby -v
的输出,这将对情况有所帮助。例如Ruby REE与MRI与JRuby等
此外,这只是一种观点,所以要相信它的价值,但我认为苹果公司不太善于保持内置版本的Ruby更新,所以如果你使用的是内置版本,那么就考虑换一个版本。