Scala函数变量:使用默认值(从函数或在变量定义中定义)



我已经定义了使用默认变量的方法。当使用或没有该变量的值的情况下调用该方法时,一切都按预期工作。

但是,当我将方法分配给函数变量时,不再可以在没有参数的情况下调用它。

此示例说明了行为:

def main(args: Array[String]) : Unit = {
    doStuff(5)
    doStuff()
    val f : (Int => Unit) = doStuff
    f(5)
    f()  //compiler error: not enough arguments for method apply: (v1: Int)Unit in trait Function1. Unspecified value parameter v1.
  }
  def doStuff(x : Int = 5) : Unit = {
    println(x)
  }

但是,对于一个更具旋转的示例,我需要这个。我可以获取函数变量以使用函数doStuff的默认值吗?我是否必须将其他类型用于函数变量?

另外,我可以为函数变量f

定义一个单独的默认变量

在您定义匿名函数的F函数中,您在哪里给您传递的INT参数给出默认值?发生的事情是编译器将为您提供一种应用方法,并且此应用方法将非默认的INT作为参数!

您可能可以将您的匿名函数扩展为:

  val func1 = new Function1[Int, Unit] {
    def apply(x: Int = 5) = println(x)
  }

,但即使那将导致汇编失败,因为默认值不会用于函数1特征!

这可能是您想要的:

  val f = new Function1[Int, Unit] {
    def apply(x: Int) = doStuff(x)
    def apply() = doStuff()
  }

最新更新