2014-10-15 45 views
15

ho una seguente funzione:

def removeLast(list: List[Int]): List[Int] = list match { 
    case List() => List() 
    case List(x) => List() 
    case x :: xs => x :: removeLast(xs) 
} 

Quando mi definiscono e l'uso dalla console sbt tutto funziona bene. Ma quando creo un foglio di lavoro in IntelliJ IDEA e provo a farlo funzionare, allora appare la seguente eccezione:

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)

Inoltre, quando cambio ultima riga a:

case x :: xs => 1 :: removeLast(xs)} 

allora funziona.

Quale potrebbe essere il problema?

+0

È possibile modificare la firma a ' def removeLast [T] (list: List [T]): List [T] ' –

+0

Grazie per la risposta, purtroppo l'ho già provato e il risultato è come descritto sopra. –

+0

L'idea usa il proprio compilatore di scala. Quindi dovresti creare un ticket per https://youtrack.jetbrains.com/issues/SCL. Verifica innanzitutto se disponi dell'ultima versione del plug-in. 135.1228 –

risposta

22

Ho avuto questo problema. D'accordo con Andrzej, l'idea usa il proprio compilatore, quindi devi disabilitarlo in qualche modo. Passare a Impostazioni-> Scala-> Foglio di lavoro e deselezionare "Esegui foglio di lavoro nel processo di compilazione".

+2

Grazie. Ha funzionato come un fascino. Questa è la "Scala" in Impostazioni progetto. Aiuta a deselezionare come hai detto in "Impostazioni predefinite progetto". –

+0

Deselezionando questa opzione ha causato: 1) nel foglio di lavoro, la riga (nella scheda dei risultati) che ha segnalato "java.lang.NoSuchMethodError ..." è scomparsa improvvisamente, ma non ha ancora valutato 2) la mia Idea per creare un sacco di java.exe e conhost.exe, che ha preso il 100% della CPU e ha reso l'Idea incredibilmente lenta e poco reattiva. c'è un'altra soluzione? – PaoloC

+0

Tomek, nie działa dla mnie –

0

Ho lo stesso problema. Quando lo cambi ad usare la funzione mappa funziona! Non so perché ma questo è come aggiustarlo.

+0

Soluzione con una funzione mappa non è quello che stavo cercando, ma grazie comunque. –

4

Qualsiasi risposta non è stata utile nel mio caso. Ancora ho trovato una soluzione che ha funzionato per me .. Era un problema con la versione più scalare. In pom.xml uprade a

<dependency> 
     <groupId>org.scalatest</groupId> 
     <artifactId>scalatest_2.11</artifactId> 
     <version>2.2.4</version> 
     <scope>test</scope> 
    </dependency> 

aiutato

+0

Questo ha funzionato per me. –

3

Così, anche se quanto sopra non ha risolto il mio problema è legato alla IntelliJ.

In sostanza, era preferibile che l'SDK Scala risolva il metodo Class :: invece di caricarlo dalle dipendenze.

Ho usato

-verbose:class

nello switch JVM per averlo mostrarmi dove si stava guardando; immediatamente mi coinvolge perché sta provando a caricare la classe dall'SDK di Scala (ci si aspetterebbe che inserisse libs da Maven).

ho letteralmente appena cancellato la Scala SDK dalle mie impostazioni di progetto e il problema è andato via. Finora, la mia esperienza con Scala (e sicuramente in un ambiente misto Java) mi porta a credere che abbia un modo per andare a maturare. Questa è una classe/metodo così fondamentale, non posso credere che sia svanita tra le versioni. La versione scala che avevo installato era 2.11. Apparentemente ciò che viene tirato è 2.10.4 da parte di Maven.

Ogni volta che si vede "NoSuchMethodError" è sempre significa che c'è un conflitto di versione; è una questione di perché.

1

Ho appena incontrato lo stesso problema. Ho scoperto che avevo scaricato la versione errata di Akka che includeva scala-library-2.10.x, mentre il mio progetto utilizza 2.11.6. Afferrare l'ultima versione di Akka, che include 2.11.5, ha risolto il problema.

Quindi, sembra che si tratti di un problema di compatibilità, quindi verificherei le dipendenze in futuro.

0

Ho scoperto che questo può essere causato dall'avere diverse versioni di scalatest e scalamock. Il seguito di Maven

<dependency> 
     <groupId>org.scalatest</groupId> 
     <artifactId>scalatest_2.11</artifactId><!-- this was previously 2.10 --> 
     <version>2.2.4</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.scalamock</groupId> 
     <artifactId>scalamock-scalatest-support_2.11</artifactId> 
     <version>3.2</version> 
     <scope>test</scope> 
    </dependency> 
2

Come altri ha detto qui, ho avuto lo stesso problema a causa ho avuto alcune librerie utilizzando 2.10 a dispetto di avere ScalaTest a 2.11.

<!-- 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 che tutte le librerie che si utilizzano sono in stessa versione Scala

<dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-core_2.10</artifactId> 
    <version>${spark.version}</version> 
    <scope>provided</scope> 
</dependency> 

Per

<dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-core_2.11</artifactId> 
    <version>${spark.version}</version> 
    <scope>provided</scope> 
</dependency> 

Avendo come proprietà

<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>