可以像java一样实例化scala类

时间:2012-08-14 21:50:47

标签: scala

下面的类不编译,如果我将函数声明为对象而不是类,我可以使用Functions.fac(3)运行方法fac。在scala中尝试运行这样的类是否有意义?如何修改下面的代码,使其运行而不更改为对象而不是类?

class Functions {

  def fac(n : Int) = {
    var r = 1;
    for(i <- 1 to n) r = r * i;
    r
  }
     def main(args:Array[String]) = {
      Functions f = new Functions();

      print(f.fac(3));
  }

}

2 个答案:

答案 0 :(得分:7)

代码中最明显的问题是您拥有Functions f = ...。这是Java语法,因此在Scala中您需要它来说val f: Functions = ...

其次,Scala比Java更能区分静态和非静态事物。在Scala中,在对象中声明了静态的东西(例如main方法)。因此,您应该将object(静态)部分与class部分分开。

第三,您的fac功能可以更简单地写为(1 to n).product

最后,你不需要分号。

class Functions {
  def fac(n: Int) =
    (1 to n).product
}

object Functions {
  def main(args: Array[String]) = {
    val f: Functions = new Functions()
    print(f.fac(3))
  }
}

答案 1 :(得分:1)

Java和Scala以非常不同的方式实现静态函数。在Java中,您添加了静态标识符,而在Scala中,您将该方法放在Object伴侣中。