包含爆炸的方法在REPL中不起作用

时间:2013-07-13 13:10:27

标签: scala read-eval-print-loop

我正在运行 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 个答案:

答案 0 :(得分:1)

我无法使用原始安装解决此问题,但安装新版本的Scala有所帮助。也许,这是Fedora 17 rpm Scala软件包的问题。

答案 1 :(得分:0)

您可能错过了此实例:

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