Is it possible to leave out some implicit parameters but not all of them? I tried with named parameters:

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

Unfortunately, the compiler rejects the recursive call of foo with:

not enough arguments for method foo
Unspecified value parameter b
有帮助吗?

解决方案

It is not possible to leave out some implicit parameters. So, in your example

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

It is not possible to only specify a. However, you can specify the default value of the implicit parameter, for example

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

Where if b is not implicitly available, "---" will be used.

Remember that the implicit keyword marks the parameter list as implicit, not that one parameter as implicit.

其他提示

Not sure what you're trying to achieve, but something like this could do:

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)
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top