[英]how to get scala higher-kinded type to work
我正在努力提高对Scala中更高种类的类型的理解。 回到基础知识时,我坚持以下几点:
def fooList[A <: Int](x: List[A]): List[A] = x.map{ e => e + 1 }
我不理解,Scala编译器不接受它。 “ A”必须是Int的子类。 因此,在Int下传递的任何类型都应该起作用。 为什么会抱怨? 有人可以在这里建议我吗?
中号
在这种情况下, A
实际上必须是Int
,因为您不能创建Int
的子类,但编译器似乎不想证明这一点。 的是,除了,因为A <: Int
,则+
的方法Int
返回一个Int
。
因此e + 1
是一个Int
而不是A
(即使A
必须是一个Int
)。 因此, x.map(e => e + 1)
返回List[Int]
而不是List[A]
。 为了返回List[A]
,您需要一些带有+
方法的类A
,该类也返回A
,但您不会这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.