范围限制

发布于 2024-11-26 09:40:51 字数 58 浏览 1 评论 0原文

我很惊讶。为什么对 Range 类型的实现进行限制,其大小受 Int.MaxValue 限制? 谢谢。

i'm surprised. Why was made restriction of implementation to type Range, is whose the size limited by Int.MaxValue?
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

毅然前行 2024-12-03 09:40:51

来自 NumericRange 文档,

NumericRangeRange 类的更通用版本,可以使用
具有任意类型。它必须与Integral一起提供
范围类型的实现。

可能类型的工厂包括 Range.BigIntRange.Long
Range.BigDecimalRange.Int 的存在是为了完整性,但是基于 Int
scala.Range 应该具有更高的性能。

val r1 = 新范围(0, 100, 1)
val veryBig = Int.MaxValue.toLong + 1
val r2 = Range.Long(veryBig,veryBig + 100, 1)
断言(r1 sameElements r2.map(_ - veryBig))

From the NumericRange docs,

NumericRange is a more generic version of the Range class which works
with arbitrary types. It must be supplied with an Integral
implementation of the range type.

Factories for likely types include Range.BigInt, Range.Long, and
Range.BigDecimal. Range.Int exists for completeness, but the Int-based
scala.Range should be more performant.

val r1 = new Range(0, 100, 1)
val veryBig = Int.MaxValue.toLong + 1
val r2 = Range.Long(veryBig, veryBig + 100, 1)
assert(r1 sameElements r2.map(_ - veryBig))
撩起发的微风 2024-12-03 09:40:51

在我看来,另一个答案是错误的。

它演示了您可以使用其他数字类型,但这并没有改变 Range 只能容纳 2³1 元素的事实,就像 Scala/Java 中的所有其他集合一样。

据我所知,这个设计决策背后没有真正的理由。拥有 64 位集合当然很好,并且对具有 64 位索引的数组的支持对于 Java 来说很常见,但很难将其集成到现有的语言/集合框架中。有人说 JVM 的对象总数被限制为 40 亿个,但我无法验证这一点。

In my opinion the other answer is just wrong.

It demonstrates that you can use other number types, but this doesn't change the fact that a Range can only hold 2³¹ elements, like every other collection in Scala/Java.

As far as I know there is no real rationale behind this design decision. Having 64-bit collections would be certainly nice and support for arrays with 64bit indices are common for Java, but it is hard to integrate that into the existing language/collection framework. Some people say that the JVM is limited to a total of 4 billion objects, but I couldn't verify that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文