3

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

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

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

not enough arguments for method foo
Unspecified value parameter b
4

2 回答 2

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)
}
于 2013-07-04T10:08:16.773 回答
1

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

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

不能只指定a. 但是,您可以指定隐式参数的默认值,例如

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

如果b不是隐式可用的,"---"将使用。

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

于 2013-07-04T16:43:31.570 回答