【发布时间】:2017-01-14 07:29:17
【问题描述】:
我想在编译时强制约束 Scala 方法的参数值。
例如:
case class Foo(numberOfFoo: Int, ...)
numberOfFoo 是上面的Int,但我真的很想让它成为一个正整数。我已经尝试过诸如 PositiveInt 之类的类来强制执行此操作,但这只是将检查推送到另一个仍然没有在编译时检查的类。
使用上面的例子,我想要这个:
val n: Int = ...
val f: Foo = Foo(n)
如果n > 0 则编译,如果n <= 0 则不编译。我不希望实例化代码必须处理可能的异常,处理Option[Foo],或者以Foo 结束Foo.numberOfFoo != n(即我不想使用输入参数的绝对值)。
更新:感谢您提供有用的信息。正如我所担心的那样。大多数情况下,我希望能够指定必须具有正整数大小的东西的大小。所以这似乎是最好的方法:
case class Foo(bar: Bar) {val n = bar size}
【问题讨论】:
-
这在 Scala 中是不可能的,因为它不支持值依赖类型(至少在您需要的范围内)。
标签: scala constraints compile-time