2013-03-28 50 views
1

基本上我想要的這個代碼做的是定義一個函數,timeCount,並且每個被調用時我想1從21中減去,有結果打印出來,並且具有相等結果timeNum。所以,我想從1中減去1,結果是20,打印20,然後使timeNum等於20.然後下次調用該函數時,它將等於19,18等。 。如何讓Scala倒計時功能正常工作?

但是,此代碼不起作用。我怎樣才能得到我想要發生的事情?

def timeCount() = { 
    var timeNum = 21 
    var timeLeft = timeNum-1 
    println(timeLeft) 
    var timeNum = timeLeft 
} 
} 

回答

2
class TimeCount(initial: Int) extends Function0[Int] { 
    var count = initial 

def apply = { 
    count = count - 1 
    count 
} 
} 

使用方法如下:

scala> val f = new TimeCount(21) 
f: TimeCount = <function0> 

scala> f() 
res0: Int = 20 

scala> f() 
res1: Int = 19 

scala> f() 
res2: Int = 18 

我從你問什麼,做了兩個變化,我做先從參數傳遞給函數的構造函數的數量,和我返回count,而不是打印出來,因爲這些似乎更加有用如果你真的只是想打印出來,改變Function0[Int]Function0[Unit],改變countprintln(count.toString)

這當然不是線程安全的。

1

如下狀態的編譯器錯誤,你所定義的相同var兩次。

console>:11: error: timeNum is already defined as variable timeNum 
     var timeNum = timeLeft 
      ^

請記住,一個可以修改var的價值,而不是重新定義它。

此外,您聲明並初始化函數調用的timeNumvar。結果是,一旦編譯完成,您將重複輸出相同的值(20)。

此外,timeLeftvar是多餘的。