Как запустить метод Scala из командной строки?

этот вопрос может показаться немного глупым, но я не мог понять, как запустить метод Scala из командной строки.

я скомпилировал следующий файл Test.scala :

package example

object Test {
  def print() {
    println("Hello World")
  }

}

С scalac Test.scala.

тогда я могу запустить метод print С scala в два этапа:

C:UsersJohnScalaExamples>scala
Welcome to Scala version 2.9.2 (Java HotSpot(TM) Client VM, Java 1.6.0_32).
Type in expressions to have them evaluated.
Type :help for more information.

scala> example.Test.print
Hello World

но что мне действительно нравится делать, так это запускать метод непосредственно из командной строки с помощью одной команды, такой как scala example.Test.print.

как я могу достичь этой цели ?

обновление: Предложенное решение ArikG не работает для меня - Чего мне не хватает ?

C:UsersJohnScalaExamples>scala -e 'example.Test.print'
C:UsersJohnAppDataLocalTempscalacmd1874056752498579477.scala:1: error: u
nclosed character literal
'example.Test.print'
         ^
one error found

C:UsersJohnScalaExamples>scala -e "example.Test.print"
C:UsersJohnAppDataLocalTempscalacmd1889443681948722298.scala:1: error: o
bject Test in package example cannot be accessed in package example
example.Test.print
        ^
one error found

здесь

C:UsersJohnScalaExamples>dir example
 Volume in drive C has no label.
 Volume Serial Number is 4C49-8C7F 

 Directory of C:UsersJohnScalaExamplesexample

14.08.2012  12:14    <DIR>          .
14.08.2012  12:14    <DIR>          ..
14.08.2012  12:14               493 Test$.class
14.08.2012  12:14               530 Test.class
               2 File(s)          1.023 bytes
               2 Dir(s)  107.935.760.384 bytes free

обновление 2-возможные решения:

  • Как правильно предложил ArikG, с scala -e "import example.Test._; print" хорошо работает с Windows 7.
  • см. ответ Даниила, чтобы заставить его работать без оператора импорта

3 ответов


позвольте мне немного расширить это решение:

scala -e 'example.Test.print'

вместо этого попробуйте:

scala -cp path-to-the-target-directory -e 'example.Test.print'

где целевой каталог-это каталог, в котором scala используется в качестве назначения для того, что он скомпилировал. В вашем примере, это не C:\Users\John\Scala\Examples\example, а C:\Users\John\Scala\Examples. Каталог example где Scala будет искать классы, принадлежащие пакета example.

вот почему все не получилось: он ожидал найти пакет example под a пример каталога, но не было такого каталога в текущем каталоге, в котором вы запускали scala, а файлы классов, присутствовавшие в текущем каталоге, должны были находиться в пакете по умолчанию.


лучший способ сделать это-расширить App это немного особый класс (или, по крайней мере DelayedInit которых лежит это):

package example

object Test extends App {
  println("Hello World")      
}

к этому также можно добавить методы, тело объекта выполняется при запуске.


здесь вы идете:

scala -e 'example.Test.print'