gpt4 book ai didi

Scala 类型参数边界

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

我在理解 Scala 的类型边界系统时遇到了一些麻烦。我想要做的是创建一个持有者类,该类包含 T 类型的项目,可以迭代 A 类型的项目。到目前为止我所拥有的是:

class HasIterable[T <: Iterable[A], A](item:T){
def printAll = for(i<-item) println(i.toString)
}

val hello = new HasIterable("hello")

类本身成功编译但试图创建 hello值给了我这个错误:
<console>:11: error: inferred type arguments [java.lang.String,Nothing] do 
not conform to class HasIterable's type parameter bounds [T <: Iterable[A],A]
val hello = new HasIterable("hello")
^

我本来以为 hello解析为 HasIterable[String, Char]在这种情况下。这个问题是如何解决的?

最佳答案

String本身不是 Iterable[Char] 的子类型,但它的 pimp , WrappedString , 是。为了让您的定义使用隐式转换,您需要使用 view bound ( <% ) 而不是 upper type bound ( <: ):

class HasIterable[T <% Iterable[A], A](item:T){
def printAll = for(i<-item) println(i.toString)
}

现在您的示例将起作用:
scala> val hello = new HasIterable("hello")              
hello: HasIterable[java.lang.String,Char] = HasIterable@77f2fbff

关于Scala 类型参数边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713385/

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