在一个类型中尾随逗号

0__*_*0__ 19 types scala

什么是以下类型:

(Int, => Double) => String
Run Code Online (Sandbox Code Playgroud)

请注意后面的尾随逗号Int.显然它不是一个句法漏洞,而是一些不同的东西

(Int => Double) => String
Run Code Online (Sandbox Code Playgroud)

例如,当使用重载时:

trait Foo {
  def bar(x: (Int, => Double) => String): Unit
  def bar(x: (Int  => Double) => String): Unit
}
Run Code Online (Sandbox Code Playgroud)

sen*_*nia 25

(Int, => Double) => String是一个带有名字的第二个参数(=> Double)的函数.

你不能创建一个Function2[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
Run Code Online (Sandbox Code Playgroud)