【发布时间】:2012-03-14 01:51:24
【问题描述】:
考虑以下几点:
def f(implicit a: String, y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
最后一个表达式导致以下错误:
not enough arguments for method f: (implicit a: String, implicit y:
Int)java.lang.String. Unspecified value parameter a.
但是,如果您为隐式参数 a 提供默认值,则没有问题:
def f(implicit a: String = "haha!", y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
但最后一行打印出来
haha!: 2
虽然我已经预料到了
size: 2
所以隐含值's'没有被拾取。如果您不向 f 提供任何参数而只是调用
println(f)
然后隐式值被拾取,你得到
size: 0
有人能解释一下这里发生了什么吗?
【问题讨论】:
标签: scala default-value named-parameters implicits