2013-09-23 29 views
5

编译如果我在Eclipse中创建一个工作表斯卡拉如下:的toString上负数不Scala的工作表

object negative { 

    2.toString        //> res0: String = 2 

    (2).toString        //> res1: String = 2 

    // compile error 
    (-2).toString 
} 

最后一行将导致编译错误:

';' expected but ')' found. illegal start of simple expression

然而,同样的三行在正常的Scala源文件中编译并运行良好。

为什么这在工作表中不起作用?

这是使用Eclipse 3.7.2,斯卡拉IDE 3.0.0.v-2_10,斯卡拉工作表0.1.4.v-2_10

[更新:这个问题最初使用toBinaryString,但问题甚至发生与toString,所以我已经简化了它]

回答

1

这是一个错误。工作表主对象(第一个)中的代码在执行之前进行检测。在上述两种情况下,检测结果不是有效的Scala代码。

但是,如果代码位于主对象的顶层,这只是一个问题。如果代码被移动到同一个文件中的一个函数或不同的对象,它可以正常工作。

+0

感谢您的解释。我已经将它报告为一个bug [这里](https://github.com/scala-ide/scala-worksheet/issues/160) – DNA

+0

如果您只是将它包装在主对象内的代码块中, 。 – DNA

1

Eclipse工作表是相当beta;例如,最后我检查了一下,它无法处理一个函数上的装饰(@tailrec)。

所以这可能是Eclipse中的一个错误或限制。毕竟,这个功能看起来很新,还有很多其他的错误。

0

(-2).toBinaryString 给我同样的错误。

请注意,java.lang.Integer.toBinaryString(-2)工作得很好。