Как запустить метод 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. - смотрите ответ Даниила, чтобы заставить его работать без оператора импорта
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. В каталогеexampleScala будет искать классы, принадлежащие пакету .example.Вот почему ничего не получилось: он ожидал найти пакет
exampleв Примере каталога, но такого каталога не было в текущем каталоге, в котором вы запускалиscala, и файлы классов, которые присутствовали в текущем каталоге, должны были быть в пакете по умолчанию.
Лучший способ сделать это-расширить App, который является немного специальным классом (или, по крайней мере, DelayedInit, который лежит в его основе):
package example object Test extends App { println("Hello World") }К этому еще можно добавить методы, тело объекта выполняется при запуске.
Comments