16

私は Scala の初心者です。Scala を実行するのは初めてです。Scala をインストールしたときに、という名前のファイルを作成しましたHello.scala。内容は次のとおりです。

println("HelloWorld!")

と入力するscalaと問題なく scala REPL が表示されましたが、 と入力scala Hello.scalaすると次のプロンプトが表示されました。

<console>:1: error: ';' expected but '.' is found.

何が問題なのかわかりません。誰かが私を助けてくれることを願っています。

4

9 に答える 9

25
于 2015-01-25T07:55:55.693 に答える
16

REPL で外部スクリプトを実行する (そこからすべての定義をロードする) には、:load <filepath>の代わりにコマンドを使用しscala <filepath>ます。

» echo 'println("HelloWorld")' > Hello.scala
» scala
Welcome to Scala version 2.9.2 (OpenJDK Client VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.

// is this what you tried to do?
scala> scala Hello.scala
<console>:1: error: ';' expected but '.' found.
   scala Hello.scala

// do this instead
scala> :load Hello.scala
Loading Hello.scala...
HelloWorld

scala>
于 2012-09-13T07:49:21.120 に答える
13

あなたのファイルHello.scalaはスクリプトです。でコマンドプロンプトから実行できるはずですscala Hello.scala

$ scala Hello.scala 
HelloWorld!

一方、REPL はスクリプトを実行するためのものではありません。これは、scala コードを直接実行するために使用されます。

scala> println("HelloWorld!")
"HelloWorld!"
于 2012-09-13T04:50:35.423 に答える
1

私が知っていることの要約です。scala ファイルを適切に実行する方法に戸惑いました。

要するに、これを達成するには 3 つの方法があります。

  1. スクリプトファイル用。:pasteスクリプトの場合は、REPL でステートメントの行を入力するか、モードを使用して複数の行を貼り付けるのと同じことを意味します。何かのようなもの:

    println("foo")

  2. を使用して main メソッドを含むオブジェクトをコンパイルしますscalacextendsアプリの特性を簡単に実装できます。

    def main(args: Array[String]) : ユニット

あなたは「うそつき、方法は 2 つしかない」と言うかもしれません。しかし、2 つ目については、実行する方法が多すぎると思います。

  1. scala -howtorun:object ObjectName -cp "./" :-cp保険用です。
  2. java -cp "/path/to/your/scala-jars" ObjectName: 違いは、クラスパスを含める必要があることだけです。
于 2012-09-13T14:14:54.903 に答える
1

Unix のフレーバーを使用している場合は、ファイルの先頭にパウンド バンディレクティブを追加することで、Scala スクリプトをシェル スクリプトとして実行できます。

たとえば、 という名前のファイルに次のように入力しますhelloarg

#!/bin/sh
exec scala "$0" "$@"
!#
// Say hello to the first argument
println("Hello, "+ args(0) +"!")

イニシャル#!/bin/shは、ファイルの最初の行でなければなりません。
実行権限を設定したら:

$ chmod +x helloarg

次のように言うだけで、Scala スクリプトをシェル スクリプトとして実行できます。

$ ./helloarg globe

Windows を使用している場合は、ファイルに名前を付け、helloarg.batこれをスクリプトの先頭に配置することで、同じ効果を得ることができます。

::#!
@echo off
call scala % 0 % *
goto :eof
::!#
于 2014-04-15T09:54:34.980 に答える
0

これは、開発用のMacで機能します。

#!/usr/bin/env scala -nc
println("hello");
于 2016-10-12T00:48:36.407 に答える