表示编译器:在具有多个参数的方法调用中键入完成

时间:2014-07-20 14:29:13

标签: scala scala-compiler

我使用 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!>,) 是一些错误还是预期的行为?

1 个答案:

答案 0 :(得分:1)

我已经对编译器进行了原型更改,以便对缺少的参数进行更强的容错。

https://github.com/retronym/scala/commit/c1460f50945a161599d6d454da355ee20aa402b2

而不是简单地拯救&#34;没有足够的论据&#34;错误,如果我们已经解决了单个(非重载)方法,我们也可以检查给定的参数。我们需要使用参数类型作为期望类型来检查参数x => x....,以便推断lambda参数类型,并依次提供完成。

我已将此作为增强功能提出:https://issues.scala-lang.org/browse/SI-8739