【发布时间】:2017-11-27 05:21:42
【问题描述】:
我想知道是否可以在 Scala 中定义一个类型,该类型将一个数字包装在一个范围内并在编译时断言它的有效性。例如:[0,1] 范围内的所有数字,因此我可以定义一个采用 BetweenZeroAndOne 类型的函数。我知道我可以定义一个包含/包装数字的案例类,然后检查数字是否在运行时范围内,并且我还可以使用隐式转换 Int => BetweenZeroAndOne、Double => BetweenZeroAndOne、BetweenZeroAndOne => Int.. .但是可以定义0到1之间的数字类型吗?
谢谢,
【问题讨论】:
-
如果您谈论的是:data Bool = False |是的(在 Haskel 中)。那我觉得你不能这样做。
-
@Pavel 我对 haskell 了解不多,但您的定义类似于 OO 中的层次结构,例如 True 扩展 Bool,False 扩展 Bool。我要求的是连续值。
-
顺便问一下你的范围有多大??
-
@Pavel 从 0 到 1。无限数。
-
刚刚发布了使用 scala 枚举的可能方法,可能是很好的解决方法等
标签: scala validation types compile-time