2012-08-14 91 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伴侶中。

相關問題