使用显式默认参数调用 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