Sam Bean
Sam Bean

Reputation: 39

Scala Args Parsing

Why does

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

work when I run scala nomain.scala but

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

Gives me the error:

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)

when I run scala helloworld.scala

I tried adding some statements like if (args.size > 0) but that also gives me errors. I am wondering what I am doing wrong here. I am wondering how I would check to see if the list has something in it and also how to directly print args.

Upvotes: 2

Views: 3630

Answers (2)

Sohum Sachdev
Sohum Sachdev

Reputation: 1397

You should do something like this to check if the first argument exists:

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

Upvotes: 1

Dmytro Mitin
Dmytro Mitin

Reputation: 51658

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

should be instead of

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

Upvotes: 1

Related Questions