1

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

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));
  }

}
4

2 回答 2

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))
  }
}
于 2012-08-14T21:53:43.860 回答
1

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

于 2012-08-14T21:56:32.940 回答