2017-09-10 11 views
1

私はScalaのnomain.scalaを実行しますが、ScalaのArgsの解析

object HelloWorld { 
    def main(args: List[String]) { 
    println("Hello, " + args(0) + "!") 
    } 
} 

は私にエラーを与えるのに、なぜ

println("Hello, " + args(0) + "!") 

作業を行います。

java.lang.NoSuchMethodException: Main.main([Ljava.lang.String;) 
    at java.lang.Class.getMethod(Class.java:1786) 
    at scala.reflect.internal.util.ScalaClassLoader.run(ScalaClassLoader.scala:94) 
    at scala.reflect.internal.util.ScalaClassLoader.run$(ScalaClassLoader.scala:90) 
    at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:129) 
    at scala.tools.nsc.CommonRunner.run(ObjectRunner.scala:22) 
    at scala.tools.nsc.CommonRunner.run$(ObjectRunner.scala:21) 
    at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:39) 
    at scala.tools.nsc.CommonRunner.runAndCatch(ObjectRunner.scala:29) 
    at scala.tools.nsc.CommonRunner.runAndCatch$(ObjectRunner.scala:28) 
    at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:39) 
    at scala.tools.nsc.ScriptRunner.runCompiled(ScriptRunner.scala:170) 
    at scala.tools.nsc.ScriptRunner.$anonfun$runScript$1(ScriptRunner.scala:187) 
    at scala.tools.nsc.ScriptRunner.$anonfun$runScript$1$adapted(ScriptRunner.scala:187) 
    at scala.tools.nsc.ScriptRunner.$anonfun$withCompiledScript$2(ScriptRunner.scala:156) 
    at scala.tools.nsc.ScriptRunner.runScript(ScriptRunner.scala:124) 
    at scala.tools.nsc.ScriptRunner.runScriptAndCatch(ScriptRunner.scala:200) 
    at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:63) 
    at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:88) 
    at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:99) 
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:104) 
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) 

私はスカラ座helloworld.scalaを実行します

if (args.size > 0)しかし、それはまた私にエラーを与える。私はここで間違って何をしているのだろうかと思います。私は、リストに何かがあるかどうか、どうやってargsを直接出力するかをチェックする方法が不思議です。

答えて

1
def main(args: Array[String]): Unit = ??? 

は、あなたが最初の引数が存在するかどうかを確認するために、このような何かをしなければならない代わりに

def main(args: List[String]): Unit = ??? 
+0

うん、私は逆方向にいくつかの手順を取り、これを実現しました。しかし、私のフォローアップは、argsの長さが1でプログラムを開始するかどうかを確認する方法です。 –

+0

@SamBeanは 'scalac HelloWorld.scala'と' scala HelloWorld World'を実行します。 –

+0

必要に応じて 'if(args.length> 0)'または 'if(args.size> 0)'を追加できます。 –

1

でなければなりません:

object HelloWorld { 
    def main(args: Array[String]) { 
    if(args.headOption.isDefined) { 
     println("Hello, " + args(0) + "!") 
    } else { 
     println("There is no first argument") 
    } 
    } 
} 
関連する問題