2
我有,这是一个愚蠢的问题的感觉,但这里去...我可以定义一个类型是另一种类型的元素的子集?这是一个简单的例子。如何将一个类型约束为另一个类型的子集?
scala> class Even(i: Int) {
| assert(i % 2 == 0)
| }
defined class Even
scala> new Even(3)
java.lang.AssertionError: assertion failed
这是一个运行时检查。我可以定义一个在编译时检查过的类型吗? IE,那输入参数i
可以证明总是偶数?
C#可以在编译时做一个有限的版本。 –
您可以定义'Even.apply',以便在approprite时产生一个“Odd”。开玩笑... – Raphael