使用显式默认参数调用 Scala 函数
Call Scala function with explicit default arguments
Scala 中有没有一种方法可以显式地告诉函数您要使用默认参数?
示例
def myFunction(default : Int = 0) { /* logic */ }
myFunction(number match {
case 5 => 5
case _ => ???
})
是否可以将 ???
替换为默认调用函数的内容? (当然,我可以用 0
代替,但为简单起见假设此示例)
谢谢
number match {
case 5 => myFunction(5)
case _ => myFunction()
}
我认为您可以通过使用 模式匹配 和 函数 调用来实现。
@chengpohi 推荐的方法才是正确的。完全按照您的要求进行操作的唯一方法是弄乱 scalac 如何在幕后实现默认参数:
myFunction(number match {
case 5 => 5
case _ => myFunction$default
})
但非常不推荐这样做。
另外请注意,如果在 REPL 中不进行调整就粘贴,这可能不起作用,因为 REPL 将内容包装在其他对象中,您必须知道 myFunction$default
的绝对路径。要在 REPL 中测试它,您必须将它包装在一个对象中或 class:
scala> object Foo {
| def myFunction(a: Int = 0) = println(a)
|
| val number = 42
| myFunction(number match {
| case 5 => 5
| case _ => myFunction$default
| })
| }
defined object Foo
scala> Foo
0
res5: Foo.type = Foo$@2035f1f0
Scala 中有没有一种方法可以显式地告诉函数您要使用默认参数?
示例
def myFunction(default : Int = 0) { /* logic */ }
myFunction(number match {
case 5 => 5
case _ => ???
})
是否可以将 ???
替换为默认调用函数的内容? (当然,我可以用 0
代替,但为简单起见假设此示例)
谢谢
number match {
case 5 => myFunction(5)
case _ => myFunction()
}
我认为您可以通过使用 模式匹配 和 函数 调用来实现。
@chengpohi 推荐的方法才是正确的。完全按照您的要求进行操作的唯一方法是弄乱 scalac 如何在幕后实现默认参数:
myFunction(number match {
case 5 => 5
case _ => myFunction$default
})
但非常不推荐这样做。
另外请注意,如果在 REPL 中不进行调整就粘贴,这可能不起作用,因为 REPL 将内容包装在其他对象中,您必须知道 myFunction$default
的绝对路径。要在 REPL 中测试它,您必须将它包装在一个对象中或 class:
scala> object Foo {
| def myFunction(a: Int = 0) = println(a)
|
| val number = 42
| myFunction(number match {
| case 5 => 5
| case _ => myFunction$default
| })
| }
defined object Foo
scala> Foo
0
res5: Foo.type = Foo$@2035f1f0