2

askReloadでソースをコンパイラにロードし、その後に askTypeCompletion を呼び出そうとします。(ドット)。最初のケース (2 つの引数を持つメソッド) の補完は機能しませんが、1 つの引数を持つメソッド呼び出しの補完は期待どおりに機能します。

  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....ラムダパラメーターの型を推測し、補完を提供するために、パラメーターの型を期待される型として使用して引数を型チェックする必要があります。

これを機能強化として提出しました:https://issues.scala-lang.org/browse/SI-8739

于 2014-07-21T18:41:10.847 に答える