scala - 如何强制集合(Seq、List 等)只接受正整数 - Scala

标签 scala compilation integer constraints

理想情况下,我希望在 Scala 中强制执行 Collection 以仅允许正整数。有办法吗?

我可以在运行时通过将 Sequence 包装在类中并验证其初始化来实现它,但这意味着在运行时处理异常。编译时解决方案会更好。

最佳答案

您可以使用 refined定义一个 List[Int @@ Positive],它是一个大于零的 Int 列表。然后精化将在编译时检查列表中的所有元素是否为正:

import eu.timepit.refined.auto._
import eu.timepit.refined.numeric.Positive
import shapeless.tag.@@

scala> val posInts: List[Int @@ Positive] = List(1, 2, 3)
posInts: List[Int @@ Positive] = List(1, 2, 3)

如果你试图在 List 中放入一个非正的 Int,你会得到一个编译错误:

scala> val posInts: List[Int @@ Positive] = List(1, 2, 3, -4)
<console>:43: error: Predicate failed: (-4 > 0).
       val posInts: List[Int @@ Positive] = List(1, 2, 3, -4)
                                                           ^

关于scala - 如何强制集合(Seq、List 等)只接受正整数 - Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33383002/

相关文章:

iphone - 在 Xcode 中编译 sqlite 项目时出错

C 中整数的计数排序列表

prolog - 适用于大数的 positive_integer/1 谓词

c++ - 无法链接到 vtk 6.3/usr/bin/ld : cannot find -lvtkCommon

c++ - C++中如何链接头文件

ScalaTest:运行测试 50 次

java - 如何在 Scala 中使用 Java 自界类

java - 如何将字符串值转换为整数数组列表 - Android

scala - scala 访问限定符的保证是什么?

regex - 在 Scala 中使用带过滤器的正则表达式