我有以下功能:
def removeLast(list: List[Int]): List[Int] = list match {
case List() => List()
case List(x) => List()
case x :: xs => x :: removeLast(xs)
}
当我定义它并从sbt控制台使用它时,一切正常。 但是当我在Intellij IDEA中创建工作表并尝试运行它时,会出现以下异常:
java.lang.NoSuchMethodError:scala.collection.immutable。$ colon $ colon.hd $ 1()Ljava / lang / Object; 在第5周.A $ A26 $ A $ A26.removeLast(lists.sc8362409100671270508.tmp:30) 在#worksheet#。#worksheet#(lists.sc8362409100671270508.tmp:33)
此外,当我将最后一行改为:
时case x :: xs => 1 :: removeLast(xs)}
然后它有效。
问题可能是什么?
答案 0 :(得分:27)
我有这个问题。同意Andrzej,idea使用自己的编译器,所以你必须以某种方式禁用它。 转到设置 - > Scala->工作表,然后取消选中“在编译器流程中运行工作表”。
答案 1 :(得分:5)
在我的案例中,任何答案都没有用。我仍然找到了一个适合我的解决方案.. 这是scalatest版本的问题。在pom.xml中升级到
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
帮助
答案 2 :(得分:5)
所以,虽然以上并没有解决我的问题,但它与intellij有关。
基本上,它更喜欢使用Scala SDK来解析Class ::方法,而不是从依赖项加载。
我用过
在JVM开关中-verbose:类
让它显示它在哪里;我立即抓住它,因为它试图从Scala SDK加载类(它会期望它从Maven中提取库)。
我只是 从我的项目设置中删除了Scala SDK ,问题就消失了。到目前为止,我对Scala的体验(以及在混合Java环境中的体验)让我相信它有一些成熟的方法。这是一个基本的类/方法,我无法相信它在版本之间消失了。我安装的scala版本是2.11。显然,从maven获得的是2.10.4。
任何时候你看到“NoSuchMethodError”它总是意味着存在版本冲突;这是一个为什么的问题。
答案 3 :(得分:2)
就像其他人在这里说的那样,我遇到了同样的问题,因为我有一些使用2.10的库,尽管2.11时有scalatest。
<!-- http://www.scalactic.org/ -->
<dependency>
<groupId>org.scalactic</groupId>
<artifactId>scalactic_2.11</artifactId>
<version>${scalactic.version}</version>
<scope>test</scope>
</dependency>
<!-- http://www.scalatest.org/ -->
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>${scalactic.version}</version>
<scope>test</scope>
</dependency>
Chech您正在使用的所有库都在相同的Scala版本
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
要
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
具有属性
<properties>
<scala.tools.version>2.11.8</scala.tools.version>
<scala.version>2.11.8</scala.version>
<scalactic.version>3.0.0</scalactic.version>
<!-- Library Versions -->
<spark.version>2.0.0</spark.version>
....
</properties>
答案 4 :(得分:1)
我刚遇到同样的问题。原来我已经下载了包含scala-library-2.10.x的错误版本的Akka,而我的项目使用了2.11.6。抓住最新版本的Akka,包括2.11.5,解决了这个问题。
所以,这似乎是一个兼容性问题,所以我将来会检查依赖项。
答案 5 :(得分:1)
错误 java.lang.NoSuchMethodError:scala.collection.immutable。$ colon $ colon.hd $ 1()Ljava / lang / Object
原因 此错误专门是由于spark和scala之间的版本不匹配所致。我在使用spark 2.2.0和scala 2.10.6时遇到错误。然后我换成了不同的Scala版本,但没有成功。
解决方案 仅当我将scala版本更改为2.11.6时,此错误才会得到解决。这个版本非常适合spark 2.2.0。也许您可以为同一问题尝试使用更高版本的scala,但我尝试使用2.12.x但没有用。
建议 要求您在进行任何编码之前设置以下版本: 火花-2.2.0 斯卡拉-2.11.6
我还使用了以下pom:
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
答案 6 :(得分:0)
我有同样的问题。当您将其更改为使用地图功能时,它可以工作!我不知道为什么,但那就是如何解决它。
答案 7 :(得分:0)
我发现这可能是因为有不同版本的scalatest和scalamock。以下Maven
realloc
答案 8 :(得分:0)
添加json4
时,我有同样的想法。我通过将artifactId从json4s-native_2.12
更改为-json4s-native_2.11
来解决了这个问题。
我想这与您使用的Scala版本是2.11而不是2.12有关(您可以在properties
文件的pom.xml
xml节点中看到您的Scala版本,我的名称是:<scala.version>2.11</scala.version>
。 )
答案 9 :(得分:0)
我通过将我的项目中的scala sdk版本从2.12设置为2.11解决了这个问题。
答案 10 :(得分:0)
这是版本问题,只需使用scala sdk版本到2.11。