为什么scala中的类型推断一次只发生一个参数列表?

为什么scala中的类型推断一次只发生一个参数列表?,scala,Scala,从 在Scala中,类型推断只进行一个参数 一次列出一张清单。假设您有以下方法: def foldLeft1[A, B](as: List[A], b0: B, op: (B, A) => B) = ??? 然后你想用下面的方式来调用它,但是会发现 不编译: def notPossible = foldLeft1(numbers, 0, _ + _) 您必须按以下方式之一进行调用: def firstWay = foldLeft1[Int, Int](numbers, 0, _ + _

在Scala中,类型推断只进行一个参数 一次列出一张清单。假设您有以下方法:

def foldLeft1[A, B](as: List[A], b0: B, op: (B, A) => B) = ???
然后你想用下面的方式来调用它,但是会发现 不编译:

def notPossible = foldLeft1(numbers, 0, _ + _)
您必须按以下方式之一进行调用:

def firstWay = foldLeft1[Int, Int](numbers, 0, _ + _)
def secondWay = foldLeft1(numbers, 0, (a: Int, b: Int) => a + b)

为什么scala是这样建造的?参数之间的类型推断是否有用且可能?

有用?对可能的可能容易做吗?我猜不会。为什么它是这样建造的?也许是因为语言创造者的简单性,到那时他们已经有很多事情要做了。永远不会改变吗?是和否,对于Scala 2来说永远不会是这样;但AFAIKScala3确实提供了更好的类型推断,在这种情况下应该可以工作。证明在Scala 2中不可能的是在Scala 3中现在可能的。正如文档中解释的“它是这样发生的”: