有没有办法禁止参数化类型被特定类型参数化?
例如假设我想创建自己的专用List [T]类型,我不希望List [Nothing]合法,即导致编译错误.
我正在寻找一种方法来使以下错误更容易被捕获(是的,我知道这不是非常实用或伟大的Scala):
val x = ListBuffer()
x += 2
Run Code Online (Sandbox Code Playgroud)
x的类型为ListBuffer [Nothing].
Kip*_*ros 10
这种作品,
class C[A](x: A*)(implicit ev: A =:= A) { }
Run Code Online (Sandbox Code Playgroud)
如果A = Nothing推断出会出现类型错误,
val c1 = new C[Int]() // Ok
val c2 = new C(1) // Ok, type `A = Int` inferred
val c3 = new C() // Type error, found (Nothing =:= Nothing) required: (A =:= A)
Run Code Online (Sandbox Code Playgroud)
但是仍然可以将类型参数显式设置A为Nothing,
val c4 = new C[Nothing]() // Ok
Run Code Online (Sandbox Code Playgroud)
更一般地说,确保Scala中两种类型不相等是非常棘手的.在此处和此处查看先前的问题.一种方法是建立一种情况,即相同的类型会导致含糊不清的含义.
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |