2013-09-23 9 views
5

Jeśli utworzyć Scala arkusza w Eclipse następująco:toString na liczby ujemnej nie kompiluje w Scala arkusza

object negative { 

    2.toString        //> res0: String = 2 

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

    // compile error 
    (-2).toString 
} 

ostateczna linia powoduje błąd kompilacji:

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

jednak te same trzy linie kompilują się i działają poprawnie w normalnym pliku źródłowym Scala.

Dlaczego to nie działa w arkuszu?

to przy użyciu Eclipse 3.7.2, Scala IDE 3.0.0.v-2_10, Scala Arkusz 0.1.4.v-2_10

[Aktualizacja: to pytanie pierwotnie używane toBinaryString, ale problem występuje nawet z toString, więc go uprościliśmy]

Odpowiedz

1

To jest błąd. Kod w głównym obiekcie (pierwszym) arkusza roboczego jest instrumentowany przed jego wykonaniem. W 2 wspomnianym przypadku wynikiem oprzyrządowania jest nieprawidłowy kod Scala.

Ale to tylko problem, jeśli kod znajduje się na najwyższym poziomie w głównym obiekcie. Jeśli kod zostanie przeniesiony do funkcji lub innego obiektu w tym samym pliku, działa poprawnie.

+0

Dzięki za wyjaśnienie. Zgłosiłem to jako błąd [tutaj] (https://github.com/scala-ide/scala-worksheet/issues/160) – DNA

+0

Działa również, jeśli po prostu umieścisz go w bloku kodu {} w głównym obiekcie . – DNA

1

Arkusze programu Eclipse są całkiem beta; na przykład ostatnio sprawdziłem, to nie może obsłużyć dekoracji @tailrec na funkcji.

Jest to prawdopodobnie błąd lub ograniczenie w Eclipse. W końcu funkcja wydaje się całkiem nowa i istnieje wiele innych błędów.

0

(-2).toBinaryString daje ten sam błąd dla mnie.

Pamiętaj, że java.lang.Integer.toBinaryString(-2) działa dobrze.

Powiązane problemy