我使用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] }
如果我指定类型,如:
class SomeClass extends SomeTrait[String,String] {
def apply(request: String, f: String => Unit) {
f.apply(request.toUpperCase())
}
}
它汇编在两者中。
版本等。:
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
答案 0 :(得分:4)
Eclipse在这里是错误的...你应该看到与命令行情况相同的编译时错误。
令人费解的是,Eclipse中嵌入的Scala编译器(只是在增量编译模式下运行的scalac 2.8.1.final)正在成功编译您最初提供的源,并推断出您想要的参数类型。 ..生成类文件,在二进制输出中,SomeClass.apply具有您期望的签名。
这不应该发生。
更新:
正如Paul所说,IDE的行为就像启用了-infer-argument-types一样。它的行为就像启用了-Ydependent-method-types。这表明-Xexperimental选项背后的新逻辑存在一些问题,当编译器设置实例以IDE的方式创建时,它会显示出来。
答案 1 :(得分:2)
你在任何地方使用-Yinfer-argument-types。