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的類型是已知的。爲什麼這個編譯失敗?