gpt4 book ai didi

Scala禁止特定类型的参数化

转载 作者:行者123 更新时间:2023-12-04 03:40:17 26 4
gpt4 key购买 nike

有没有一种方法可以禁止将特定类型的参数化为参数化类型?

例如假设我要创建自己的专用List [T]类型,而不希望List [Nothing]合法,即导致编译错误。

我正在寻找一种使以下错误更容易捕获的方法(是的,我知道这不是非常有用的功能或出色的Scala):

val x = ListBuffer()
x += 2

x的类型为ListBuffer [Nothing]。

最佳答案

这类作品

class C[A](x: A*)(implicit ev: A =:= A) { }

如果推断出 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)

但是仍然可以将类型参数 A显式设置为 Nothing
val c4 = new C[Nothing]() // Ok

更笼统地说,要确保两种类型在Scala中不相等是非常棘手的。请参阅先前的问题 herehere。一种方法是建立一种情况,其中相等的类型将导致模棱两可的隐式。

关于Scala禁止特定类型的参数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7357208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com