αƞjiβ
αƞjiβ

Reputation: 3246

Run menu item disappear in IntelliJ

I have scala code in IntelliJ as follows:

HelloWorld.scala

object HelloWorld {
  //var matchExample = new MatchExample()

  def main(args: Array[String]) = {
    printHello()
    //matchExample.oddEven(1)
  }

  def printHello() = {
    println("hello")
  }

}

MatchExample.scala

class MatchExample {
  def oddEven(x: Int): String = {
    "Hello"
  }
}

If I un-comment those two lines and try to do run by right-clicking in object I don't have Run menu item, but if I comment out those two lines then I do have "Run" menu item.

What I am missing?

Upvotes: 1

Views: 142

Answers (1)

Allen Chou
Allen Chou

Reputation: 1237

The reason is that your main method signature(un-comment matchExample.oddEven(1)) is incompatible with what Scala compiler requires for a runnable program.

Yours is (args: Array[String])String, the runnable program's main method signature is (args: Array[String])Unit. If you run your code in Terminal, compiler will emit a warning.

allen:Desktop allen$ scalac HelloWorld.scala 
HelloWorld.scala:1: warning: HelloWorld has a main method with    
parameter type Array[String], but HelloWorld will not be a runnable program.
Reason: main method must have exact signature (Array[String])Unit
object HelloWorld  {
   ^
one warning found

In Scala, if you wanna write a runnable program, you'd better use App trait. The post has a detailed explaination on Scala App val initialization in main method.

Upvotes: 2

Related Questions