是否可以省略一些隐式参数但不是全部?我尝试使用命名参数:
def foo(implicit a: Int, b: String) {
if (a > 0) {
println(b)
foo(a = a-1) // error
}
}
不幸的是,编译器拒绝了foo
with 的递归调用:
not enough arguments for method foo
Unspecified value parameter b
是否可以省略一些隐式参数但不是全部?我尝试使用命名参数:
def foo(implicit a: Int, b: String) {
if (a > 0) {
println(b)
foo(a = a-1) // error
}
}
不幸的是,编译器拒绝了foo
with 的递归调用:
not enough arguments for method foo
Unspecified value parameter b
不确定您要达到的目标,但是这样的事情可以做到:
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)
}
不能省略一些隐式参数。所以,在你的例子中
def foo(implicit a: Int, b: String): Unit = ???
不能只指定a
. 但是,您可以指定隐式参数的默认值,例如
def foo(implicit a: Int, b: String = "---"): Unit = ???
如果b
不是隐式可用的,"---"
将使用。
请记住,关键字将参数列表implicit
标记为隐式,而不是将一个参数标记为隐式。