2 votes

Les méthodes contenant des bang ne fonctionnent pas dans REPL

Je suis en train de courir Scala 2.9.2 REPL et si je copie&colle la méthode suivante :

  def isPrime(num: Int): Boolean = {
    val ceiling = math.sqrt(num.toDouble).toInt
    (2 to ceiling) forall (x => num % x != 0)
  }

du fichier avec un code source (où il fonctionne bien) à l'Interpréteur Interactif. J'obtiens cette exception :

java.lang.IllegalArgumentException: != 0): event not found
   at jline.console.ConsoleReader.expandEvents(ConsoleReader.java:426) 
   ...

Le problème est le suivant ! (les méthodes sans point d'exclamation fonctionnent bien).

Y a-t-il un moyen de faire fonctionner cette méthode dans le REPL ?

1voto

Jiri Kremser Points 8186

Je n'ai pas réussi à résoudre ce problème avec l'installation originale, mais l'installation de la nouvelle version de Scala m'a aidé. Il s'agit peut-être d'un problème lié au paquet Scala de Fedora 17 rpm.

1voto

som-snytt Points 17224

Vous avez peut-être manqué cet exemple :

https://issues.scala-lang.org/browse/SI-7650

Mais la correction de Paulp n'est pas compatible avec le passé.

scala> :power
** Power User mode enabled - BEEP WHIR GYVE **
** :phase has been set to 'typer'.          **
** scala.tools.nsc._ has been imported      **
** global._, definitions._ also imported    **
** Try  :help, :vals, power.<tab>           **

scala> $r.r.in.asInstanceOf[scala.tools.nsc.interpreter.JLineReader].consoleReader.setExpandEvents(false)

scala> 1 != 2
res1: Boolean = true

par opposition au plantage sur la 2.11 :

scala> 1 != 2
java.lang.IllegalArgumentException: != 2: event not found

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X