Pregunta

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
¿Fue útil?

Solución

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.

Otros consejos

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)
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top