11

この質問は少しばかげているように聞こえるかもしれませんが、コマンドラインからScalaメソッドを開始する方法がわかりませんでした。

私は次のファイルをコンパイルしましたTest.scala

package example

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

}

scalac Test.scala

次に、2つのステップでメソッドprintを実行できます。scala

C:\Users\John\Scala\Examples>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

しかし、私が本当にやりたいのは、のような1つのコマンドを使用して、コマンドラインから直接メソッドを実行することですscala example.Test.print

どうすればこの目標を達成できますか?

更新: ArikGによって提案された解決策は私には機能しません-私が欠けているものは何ですか?

C:\Users\John\Scala\Examples>scala -e 'example.Test.print'
C:\Users\John\AppData\Local\Temp\scalacmd1874056752498579477.scala:1: error: u
nclosed character literal
'example.Test.print'
         ^
one error found

C:\Users\John\Scala\Examples>scala -e "example.Test.print"
C:\Users\John\AppData\Local\Temp\scalacmd1889443681948722298.scala:1: error: o
bject Test in package example cannot be accessed in package example
example.Test.print
        ^
one error found

どこ

C:\Users\John\Scala\Examples>dir example
 Volume in drive C has no label.
 Volume Serial Number is 4C49-8C7F 

 Directory of C:\Users\John\Scala\Examples\example

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が正しく提案したように、withscala -e "import example.Test._; print"はWindows7でうまく機能します。
  • importステートメントなしで動作させるには、Danielの回答を参照してください
4

3 に答える 3

10

このソリューションについて少し詳しく説明します。

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です。このディレクトリは、Scalaがパッケージexampleに属するクラスを探す場所です。 example

これがうまくいかなかった理由です。exampleディレクトリの例でパッケージを見つけることが期待されていましたが、実行した現在のディレクトリの下にそのようなディレクトリはなく、現在のディレクトリにscala存在するクラスファイルはデフォルトのパッケージ。

于 2012-08-14T17:30:56.847 に答える
6

これを行うための最良の方法は、わずかに特別なクラスであるApp(または少なくともその基礎となるDelayedInit)を拡張することです。

package example

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

これにメソッドを追加することも可能です。オブジェクトの本体は起動時に実行されます。

于 2012-08-14T09:54:51.220 に答える
4

どうぞ:

scala -e 'example.Test.print'
于 2012-08-14T09:57:48.000 に答える