遗漏了一些隐含的参数

时间:2013-07-04 09:51:01

标签: scala implicit named-parameters

是否可以省略一些隐含的参数,但不是全部?我尝试使用命名参数:

def foo(implicit a: Int, b: String) {
  if (a > 0) {
    println(b)
    foo(a = a-1)   // error
  }
}

不幸的是,编译器拒绝foo的递归调用:

not enough arguments for method foo
Unspecified value parameter b

2 个答案:

答案 0 :(得分:1)

不确定你想要实现的目标,但是这样的事情可以做到:

def foo(implicit a: Int, b: String): Unit = {
  def helper(a: Int)(implicit b: String): Unit =
    if (a > 0) {
      println(b)
      helper(a - 1)
    }
  helper(a)
}

答案 1 :(得分:1)

不可能省略一些隐含参数。所以,在你的例子中

def foo(implicit a: Int, b: String): Unit = ???

无法仅指定a。但是,您可以指定隐式参数的默认值,例如

def foo(implicit a: Int, b: String = "---"): Unit = ???

如果b未隐式可用,则会使用"---"

请注意,implicit关键字将参数列表标记为隐式,而不是将一个参数标记为隐式。