2010-04-13 18 views
46

Estoy tratando de comenzar con Scala y no puedo salir de la puerta de salida.Scala dándome "inicio ilegal de definición"

Un archivo que consiste en la línea

package x 

me da

error: illegal start of definition

Independientemente de lo que x es y con independencia de donde pongo el archivo (que tenía una teoría que tenía que colocar el archivo en una jerarquía de directorios para que coincida con la definición del paquete, pero no). Obtengo el mismo error con el código de ejemplo del sitio web y con el REPL.

Respuesta

55

Parece que está intentando declarar la membresía package en un script de Scala (ejecutado con el comando scala) o en el REPL.

Solo los archivos que definen solo clases y objetos compilados con scalac se pueden definir como pertenecientes a un paquete.

Cuando ejecuta código en un script o en una sesión REPL, detrás de escena se compila dentro de un método de un objeto, en cuyo ámbito una declaración de paquete no sería legal.

+9

Entonces, ¿cómo podría ejecutar el código desde la carpeta 'ejemplos' del archivo de descarga scala? La mayoría de ellos tiene una línea '' package examples'' y el contenido se apega a las reglas que yo creo. Puedo '' escalar'' ellos, pero ejecutarlos con, p. '' scala-classpath. sort'' me da '' java.lang.NoClassDefFoundError'' !? – ThomasH

+1

@ThomasH > scalac ScalaFileWithPackageLine.scala > Scala fully.qualified.name.of.topLevel.ScalaObject – tdmadeeasy

0

No obtengo este error. ¿Cómo estás compilando esto? Y, por cierto, ¿qué sitio web? En cuanto a REPL, no acepta paquetes. Los paquetes son solo para código compilado.

+2

Vaya, es literalmente * * Nunca se me ocurrió que el compilador y el intérprete pueden tener diferentes nombres de comandos. Estaba pensando en Python y usando Scala en lugar de Scalac. "¿Qué sitio web?" - Estaba a punto de responder http://www.scala-lang.org/ pero fui y revisé: el código de ejemplo era de (el excelente) http://max-l.github.com/Squeryl/ (qv) Puede que sepa comenzar a hacer esos pequeños ruidos de doy, duh, durp que tanto le gustan. – Malvolio

+0

Tengo el mismo error: estoy en esta carpeta: https://github.com/Sergey80/scala-samples/tree/master/src/main/scala/partial_function. tratando de hacer esto: scala PartialToReal.scala – ses

+1

Esto es más como un comentario y no una respuesta. –

20

Desde Scala 2.11.0-M7 puede usar :paste -raw (solución para el problema SI-5299). Esta opción permite definir paquetes en el REPL:

scala> :paste -raw 
// Entering paste mode (ctrl-D to finish) 

package Foo 

class Bar 

// Exiting paste mode, now interpreting. 


scala> import Foo._ 
import Foo._ 

scala> new Bar 
res1: Foo.Bar = [email protected] 
Cuestiones relacionadas