数字转换-Fixnum/Bignum



我以为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更新,所以如果你使用的是内置版本,那么就考虑换一个版本。

最新更新