我使用 askReload 将源码加载到编译器中,之后我尝试调用 askTypeCompletion 。 (点)。 第一种情况下的完成(带有2个参数的方法)不起作用,但是使用一个arg的方法调用中的完成按预期工作。
val list = Seq(1,2)
def add(x: Int, y: Int): Int = x + y
def minusOne(x: Int) = x - 1
add(list.<completion is not working)
minusOne(list.<works fine>)
有趣的是,如果我有代码:
implicit class OptionW[T](opt: Option[T]) {
def cata[A](some: T => A, none: A) = opt.map(some) getOrElse none
}
Option("").cata(x => x.<not working>)
点后不再工作完成,但如果我在点后键入逗号然后再次尝试在点后完成,则可以正常工作:Option("").cata(x => x.<works!>,)
是一些错误还是预期的行为?
答案 0 :(得分:1)
我已经对编译器进行了原型更改,以便对缺少的参数进行更强的容错。
https://github.com/retronym/scala/commit/c1460f50945a161599d6d454da355ee20aa402b2
而不是简单地拯救&#34;没有足够的论据&#34;错误,如果我们已经解决了单个(非重载)方法,我们也可以检查给定的参数。我们需要使用参数类型作为期望类型来检查参数x => x....
,以便推断lambda参数类型,并依次提供完成。
我已将此作为增强功能提出:https://issues.scala-lang.org/browse/SI-8739