Как запустить метод 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, with scala -e "import example.Test._; print" хорошо работает с Windows 7.

  • смотрите ответ Даниила, чтобы заставить его работать без оператора импорта

660   3  

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 в Примере каталога, но такого каталога не было в текущем каталоге, в котором вы запускали scala, и файлы классов, которые присутствовали в текущем каталоге, должны были быть в пакете по умолчанию.

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

package example

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

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

Вот, пожалуйста:

scala -e 'example.Test.print'

Comments

    Ничего не найдено.