2012-08-14 78 views
1

如果我将Functions声明为对象而不是类,那么下面的类不会编译,我可以使用Functions.fac(3)来运行方法fac。尝试像这样运行课程,在scala中有意义吗?如何修改下面的代码,使其运行时不更改为对象而不是类?可以用java相同的方式实例化一个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)); 
    } 

} 
+0

使用'new'创建一个新对象并且该代码*应该*编译(即使可能不能运行)是非常有意义的。确保您提出了您想问的问题 - 例如,什么“不起作用”呢? – 2012-08-14 21:55:52

回答

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

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

相关问题