【问题标题】:Why does JRuby not recognize BigNums while Ruby does?为什么 JRuby 不能识别 BigNums 而 Ruby 可以?
【发布时间】:2009-02-11 17:46:52
【问题描述】:

如果我输入这个大整数:

puts 9997836544.class.to_s

并用 ruby​​ 1.86 编译,它会按预期报告:

BigNum

虽然 JRuby(Netbeans 中的 1.1.4)报告令人惊讶:

Fixnum

我认为 Java 有一个 BigInteger 类来对应 Ruby 中的 BigNum 类。如果是这样,我会期望 JRuby 和 ruby​​ 产生相同的输出。

【问题讨论】:

  • 我知道 Java 确实有一个 BigInteger 类。但我对 JRuby 的了解可以装进一个顶针,还有剩余空间。

标签: java ruby-on-rails ruby jruby bignum


【解决方案1】:

找到这个JRuby bug report

似乎 JRuby 和 MRI 对区分 Fixnum 和 Bignum 有不同的限制。
...
所以,MRI 使用 0x3fffffff 作为 32bit 环境下的最大 FixNum。
而 JRuby总是 使用 64 位值:jruby -e 'p (0x7fffffffffffffff + 1).class' ---> Bignum。

所以尝试一个更大的数字,你应该得到一个如你所愿的 BigNum。

【讨论】:

  • 难以置信。感谢您找到这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 2014-10-28
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多