私はScalaを学んでいて、いくつかのコマンドライン実行ファイルを書こうとしています。Scala:構文の実行時にエラーが発生しましたか?
私は2つのバージョンのHelloWorldを持っていますが、それは意味的には同じだと思っていました。 HelloWorld.scala
がコンパイルされ、コマンドラインから正常に実行されます。 HelloWorld2.scala
はコンパイルされますが、実行時エラーが発生します。
私の質問:2つは意味的に同じだと思いますが、2番目のものがランタイムエラーを引き起こすのはなぜですか?ここで
は作業例です:
// HelloWorld.scala
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, World!")
}
}
はここで壊れた例です:
// HelloWorld2.scala
object HelloWorld2 {
def main
: Array[String] => Unit
= args => {
println("Hello, World!")
}
}
ここでコンソール出力です:
java.lang.NoSuchMethodException: HelloWorld2.main([Ljava.lang.String;)
at java.lang.Class.getMethod(Class.java:1778)
at scala.reflect.internal.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:66)
at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:101)
at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:22)
at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:39)
at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:29)
at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:39)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:65)
at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:87)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:98)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
'HelloWorld2.main'を探していますが、あなたは' HelloWorld.main'しか持っていません。ファイルと一致するようにクラス名を変更するか、ファイル名をクラスに合わせて変更してください(つまり、壊れたサンプルのコードをHelloWordにコピーしてください)。スカラー) –
ここでは二つの異なるものがあります: 'Array' [String]'を持ち、戻り値の型が 'Unit'の' main'メソッドと、 'main'メソッドとの間に引数をとらず、配列[String] 'と戻り値の型は' Unit'です。 – Jesper
@TheDark、オブジェクト名を指摘していただきありがとうございます。 TBH、それは私の質問のちょうどタイプミスでした:私が実際に作業していたファイルはオブジェクトに正しく名前を付けました。 –