类不能在scala中有main()吗?

时间:2016-10-05 22:24:20

标签: scala

我是Scala的初学者。

在Calulator.scala文件中

class Calulator {
    var brand: String ="HP"
    def add(m:Int, n:Int):Int = m+n 
}

在CalculatorTest.scala文件中

object CalulatorTest  {
    def main(args:Array[String]) {
        val cal = new Calulator
        println(cal.add(1,2))
    }
}

编译两个scala文件并运行CalculatorTest。这很有效。

我的问题是我可以将它们作为一个像Java一样的scala文件吗?

在Calulator.scala文件中

class Calulator {
    var brand: String ="HP"
    def add(m:Int, n:Int):Int = m+n 

    def main(args:Array[String]) {
        val cal = new Calulator
        println(cal.add(1,2))
    }
}

这不起作用!!! 我google了它,看起来像main()应该在对象中。

有没有办法将它们放在一个文件中运行main()?

2 个答案:

答案 0 :(得分:4)

要将它们放在一个文件中,请使用“Companion Object”的概念。

类和伴随对象必须位于同一文件中并且共享相同的名称。

class Calculator {
  var brand: String = "HP"

  def add(m: Int, n: Int): Int = m + n
}

object Calculator {
  def main(args:Array[String]) {
    val cal = new Calculator
    println(cal.add(1,2))
  }
}

进一步阅读:http://docs.scala-lang.org/tutorials/tour/singleton-objects.html

答案 1 :(得分:1)

简单的答案是 更深层次的答案是scala编译器将对象称为静态,将类引用为常规。

如果要运行Java程序,必须将main声明为 static ,否则JVM将无法将其识别为程序入口点

认为关于是否可以将它们联合起来的问题,答案不是因为那就是scala编译器的工作方式。

编译器会为 scala对象创建MyClass $ .class,为 scala类创建MyClass.class,这就是为什么你永远不应该为你的类打电话类似的东西:

class MyClass$ {

}

因为它将覆盖MyClass的伴随对象。