Методы, содержащие взрыв, не работают в 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 об / мин.

Другие вопросы по тегам