Daw*_*ruk 17 scala intellij-idea sbt intellij-13
我有以下功能:
def removeLast(list: List[Int]): List[Int] = list match {
case List() => List()
case List(x) => List()
case x :: xs => x :: removeLast(xs)
}
Run Code Online (Sandbox Code Playgroud)
当我定义它并从sbt控制台使用它时一切正常.但是当我在Intellij IDEA中创建工作表并尝试运行它时,会出现以下异常:
java.lang.NoSuchMethodError:scala.collection.immutable.$ colon $ colon.hd $ 1()Ljava/lang/Object; at week5.A $ A26 $ A $ A26.removeLast(lists.sc8362409100671270508.tmp:30)at#worksheet#.#worksheet#(lists.sc8362409100671270508.tmp:33)
另外,当我将最后一行更改为:
case x :: xs => 1 :: removeLast(xs)}
Run Code Online (Sandbox Code Playgroud)
然后它工作.
问题可能是什么?
小智 28
我有这个问题.同意Andrzej,idea使用自己的编译器,所以你必须以某种方式禁用它.转到Settings-> Scala-> Worksheet并取消选中"在编译器进程中运行工作表".
小智 6
在我的情况下,任何答案都没用.我仍然找到了一个适合我的解决方案..这是最新版本的问题.在pom.xml中升级到
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
帮助
所以,虽然上面没有解决我的问题,但它与intellij有关.
基本上,它更喜欢Scala SDK来解析Class ::方法,而不是从依赖项加载.
我用了
-verbose:类
在JVM开关中让它显示它在哪里; 我立即抓住它,因为它正在尝试从Scala SDK加载类(它希望它从Maven中提取库).
我刚从项目设置中删除了Scala SDK,问题就消失了.到目前为止,我对Scala的体验(以及在混合Java环境中的体验)让我相信它有一些成熟的方法.这是一个基本的类/方法,我无法相信它在版本之间消失了.我安装的scala版本是2.11.显然,从maven获得的是2.10.4.
任何时候你看到"NoSuchMethodError"它总是意味着存在版本冲突; 这是一个为什么的问题.
| 归档时间: |
|
| 查看次数: |
17387 次 |
| 最近记录: |