Разница в выводе типа Scala, Eclipse vs. Maven - PullRequest
1 голос
/ 14 ноября 2010

Я получаю ошибку компиляции с использованием плагина Maven Scala, который я не получаю с помощью Eclipse Scala IDE.Сначала код:

package com.example

trait SomeTrait[OUTPUT, INPUT] {
    def apply(request: INPUT, f: OUTPUT => Unit);
}

class  SomeClass extends SomeTrait[String,String] {
    def apply(request, f) {
        f.apply(request.toUpperCase())
    }
}

object App extends Application {
  override def main(args: Array[String]) {
      new SomeClass()("test", (value) => { println(value)})
  }
}

Eclipse Scala IDE в порядке, но Maven выдает мне эту ошибку:

[ERROR] .../src/main/scala/com/example/App.scala:8: 
    error: ':' expected but ',' found.
[INFO]     def apply(request, f) {
[INFO]                      ^
[ERROR] .../src/main/scala/com/example/App.scala:11: 
    error: identifier expected but '}' found.
[INFO] }

Если я указываю типы, как в:1009 * Он компилируется в обоих.

Версии и т. Д.: * 10101

Scala version: 2.8.1
Scala IDE for Eclipse: 1.0.0.201011130651
Maven: 3.0
Maven Scala Plugin: 2.15.0
Java: 1.6.0_17

Ответы [ 2 ]

4 голосов
/ 14 ноября 2010

Eclipse здесь не так ... вы должны увидеть ту же ошибку времени компиляции, что и в случае командной строки.

Что сбивает с толку, так это то, что компилятор Scala, встроенный в Eclipse (просто скаляр 2.8.1. Финал, работающий в режиме инкрементной компиляции), успешно компилирует исходный код, который вы изначально предоставили, и выводит типы аргументов, которые вам нужны. .. сгенерированы файлы классов, и в двоичном выводе SomeClass.apply имеет ожидаемую подпись.

Такого не должно быть.

UPDATE:

Как отметил Пол, IDE ведет себя так, как будто бы -Yinfer-arguments-types включены. Это также ведет себя так, как будто бы -Ydependent-method-types были включены. Это говорит о том, что с новой логикой, лежащей в основе опции -Xexperimental, что-то не так, что проявляется при создании экземпляров настроек компилятора так, как это делает IDE.

2 голосов
/ 14 ноября 2010

Вы используете -Yinfer-arguments-types везде, где это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...