Как запустить метод 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")
}
к этому также можно добавить методы, тело объекта выполняется при запуске.