Методы, содержащие взрыв, не работают в REPL
Я использую Scala 2.9.2 REPL, и если я копирую и вставляю следующий метод:
def isPrime(num: Int): Boolean = {
val ceiling = math.sqrt(num.toDouble).toInt
(2 to ceiling) forall (x => num % x != 0)
}
... из файла с исходным кодом (там, где он работает хорошо) в Interactive Interpreter. Я получаю это исключение:
java.lang.IllegalArgumentException: != 0): event not found
at jline.console.ConsoleReader.expandEvents(ConsoleReader.java:426)
...
Проблема заключается в !
характер (методы без восклицательного знака работают хорошо).
Есть ли способ заставить метод работать в REPL?
2 ответа
Решение
Возможно, вы пропустили этот экземпляр:
https://issues.scala-lang.org/browse/SI-7650
Но исправление paulp не обратно совместимо.
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
в отличие от сбоя 2.11:
scala> 1 != 2
java.lang.IllegalArgumentException: != 2: event not found
Я не смог преодолеть эту проблему с первоначальной установкой, но помогла установка новой версии Scala. Возможно, это выпуск пакета Scala Fedora 17 об / мин.