我已经定义了一个使用默认变量的方法。 当使用或不使用此变量的值调用方法时,一切都按预期工作。
但是,当我将方法分配给一个函数变量时,不再使用该参数就无法调用它。
此示例说明了行为:
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
定义一个单独的默认变量吗?
答案 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()
}