2

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

4

1 回答 1

1

我已经对编译器进行了原型更改,以便对丢失的参数更具容错性。

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

如果我们已经解析为单个(非重载)方法,我们还可以对给定的参数进行类型检查,而不是简单地解决“没有足够的参数”错误。我们需要x => x....使用参数类型作为预期类型对参数进行类型检查,以推断 lambda 参数类型,进而提供补全。

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

于 2014-07-21T18:41:10.847 回答