Scala函数变量:使用默认值(来自函数或变量定义中的define)

时间:2017-12-15 10:37:06

标签: scala functional-programming

我已经定义了一个使用默认变量的方法。 当使用或不使用此变量的值调用方法时,一切都按预期工作。

但是,当我将方法分配给一个函数变量时,不再使用该参数就无法调用它。

此示例说明了行为:

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定义一个单独的默认变量吗?

2 个答案:

答案 0 :(得分:0)

在你定义匿名函数的f函数中,你在哪里给出你传递的Int参数的默认值?会发生什么是编译器会为您提供一个apply方法,这个apply方法将非默认的Int作为参数!

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

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

但是,即使这样也会导致编译失败,因为默认值没有应用于Function1特性!

答案 1 :(得分:0)

这可能是你想要的:

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