Scala 类型中的尾随逗号

Scala 类型中的尾随逗号,scala,types,Scala,Types,以下类型究竟是什么: (Int, => Double) => String 注意Int后面的逗号。显然,这不是一个语法漏洞,而是与 (Int => Double) => String 例如,当使用过载时: trait Foo { def bar(x: (Int, => Double) => String): Unit def bar(x: (Int => Double) => String): Unit } (Int,=>Doubl

以下类型究竟是什么:

(Int, => Double) => String
注意
Int
后面的逗号。显然,这不是一个语法漏洞,而是与

(Int => Double) => String
例如,当使用过载时:

trait Foo {
  def bar(x: (Int, => Double) => String): Unit
  def bar(x: (Int  => Double) => String): Unit
}
(Int,=>Double)=>String
是一个名为第二个参数(
=>Double
)的函数

您不能创建
函数2[Int,=>Double,String]
,但可以创建lambda
(Int,=>Double)=>String
,这意味着相同的:

scala> def s:(Int, => Double) => String =
     |   (a, b) => if (a > 0) a.toString else b.toString
s: (Int, => Double) => String

scala> s(1, {println("test"); 2.0}) //second parameter is not evaluated
res0: String = 1

scala> s(-1, {println("test"); 2.0})
test
res1: String = 2.0

为什么你认为它是一个尾随逗号而不是分隔逗号?好问题,我想你需要问一个格式塔理论家。。。