3
下面的代码片段是从Twitter的Scala的学校:斯卡拉秩1多态性
Scala有秩1多态性。粗略地说,这意味着你想在Scala中表达一些类型概念,这对编译器来说太“通用”了。假设你有一些功能:
def toList[A](a: A) = List(a)
您希望使用一般:
def foo[A, B](f: A => List[A], b: B) = f(b)
这不能编译,因为所有类型的变量必须固定在调用现场。即使你“敲定”
B
类型,def foo[A](f: A => List[A], i: Int) = f(i) // Line 1
...你会得到一个类型不匹配。
为什么第1行会失败? B的类型是已知的。为什么这个编译失败?