Mar*_*der 11 scala default-value named-parameters implicits
考虑以下:
def f(implicit a: String, y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
Run Code Online (Sandbox Code Playgroud)
最后一个表达式导致以下错误:
not enough arguments for method f: (implicit a: String, implicit y:
Int)java.lang.String. Unspecified value parameter a.
Run Code Online (Sandbox Code Playgroud)
但是,如果为隐式参数a提供默认值,则没有问题:
def f(implicit a: String = "haha!", y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
Run Code Online (Sandbox Code Playgroud)
但最后一行打印
haha!: 2
Run Code Online (Sandbox Code Playgroud)
虽然我本来期待的
size: 2
Run Code Online (Sandbox Code Playgroud)
因此隐含值's'没有被提取.如果你没有为f提供任何参数而只是调用
println(f)
Run Code Online (Sandbox Code Playgroud)
那么隐含的价值就会被提起来
size: 0
Run Code Online (Sandbox Code Playgroud)
有人能否了解这里发生的事情?
jsu*_*eth 15
尝试
println(f(y = 2, a = implicitly))
Run Code Online (Sandbox Code Playgroud)
一旦开始指定参数,就无法返回.它要么是整个列表是隐式的,要么都不是.
归档时间: |
|
查看次数: |
1218 次 |
最近记录: |