【问题标题】:Call Scala function with explicit default arguments使用显式默认参数调用 Scala 函数
【发布时间】:2017-11-29 02:52:25
【问题描述】:

Scala 中是否有办法明确告诉函数您要使用默认参数?

例子

def myFunction(default : Int = 0) { /* logic */ }

myFunction(number match {
    case 5 => 5
    case _ => ???
 })

是否可以将??? 替换为默认调用函数的东西? (当然,我可以用0 代替,但为了简单起见,假设这个例子)

谢谢

【问题讨论】:

    标签: scala default-value


    【解决方案1】:
     number match {
        case 5 => myFunction(5)
        case _ => myFunction()
     }
    

    我认为您可以通过使用 pattern match 和 function 调用来做到这一点。

    【讨论】:

    • 谢谢 :) 这就是我所采用的方法。
    【解决方案2】:

    @chengpohi 建议的方法是正确的。完全按照您的要求进行操作的唯一方法是弄乱 scalac 如何在后台实现默认参数:

    myFunction(number match {
      case 5 => 5
      case _ => myFunction$default$1
    })
    

    但这是非常不推荐的。

    另外请注意,如果在 REPL 中未经调整就粘贴,这可能不起作用,因为 REPL 将内容包装在其他对象中,您必须知道 myFunction$default$1 的绝对路径。要在 REPL 中对其进行测试,您必须将其包装在一个对象或类中:

    scala> object Foo {
         |   def myFunction(a: Int = 0) = println(a)
         | 
         |   val number = 42
         |   myFunction(number match {
         |     case 5 => 5
         |     case _ => myFunction$default$1
         |   })
         | }
    defined object Foo
    
    scala> Foo
    0
    res5: Foo.type = Foo$@2035f1f0
    

    【讨论】:

      猜你喜欢
      • 2017-09-18
      • 2014-02-27
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      相关资源
      最近更新 更多