编译好:
def walk[X](a: X)(f: X => Boolean): Boolean = f(a)
walk(1)(_ => true)
此编译也很好:
def walk(a: Int)(f: Int => Boolean = _ => true): Boolean = f(a)
walk(1)()
这不是:
def walk[X](a: X)(f: X => Boolean = _ => true): Boolean = f(a)
walk(1)()
错误是:
错误:(1,38)缺少参数类型
明显的解决方法是使用(_: X) => true
,但为什么这是一个错误?我虽然在处理第二个参数列表时,从第一个参数列表中获取的类型信息应该已经可用了吗?
使用Scala 2.11.8和2.12.1进行测试
答案 0 :(得分:2)
看起来像this issue。请注意,仅适用于默认参数;推理工作得很好。
例如,
// works
def walk1[X]: X => Boolean = _ => true
// fails
def walk2[X](f: X => Boolean = _ => true) = ???