【问题标题】:How do I get this Scala count down function to work?如何让这个 Scala 倒计时功能工作?
【发布时间】:2013-03-18 10:11:37
【问题描述】:

基本上,我希望这段代码做的是定义一个函数 timeCount,每次调用它时,我都希望从 21 中减去 1,打印出结果,并让结果等于 timeNum。所以,我想从 21 中减去 1,得到 20,打印出 20,然后使 timeNum 等于 20。然后下次调用该函数时,它将等于 19、18 等,等等,.. .

但是,此代码不起作用。我怎样才能得到我想要发生的事情?

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

【问题讨论】:

    标签: function scala recursion println


    【解决方案1】:
    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
    

    我根据您的要求做了两处更改,我将数字从函数构造函数的参数开始,我返回了计数而不是打印它,因为这些看起来更有用如果你真的只是想要要打印它,请将Function0[Int] 更改为Function0[Unit] 并将count 更改为println(count.toString)

    这当然不是线程安全的。

    【讨论】:

      【解决方案2】:

      正如下面的编译器错误所述,您定义了相同的 var 两次。

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

      请记住,可以修改var 的值,但不能再次定义它。

      此外,您在函数调用中声明并初始化timeNum var。结果是,一旦编译完成,您将重复打印相同的值 (20)。

      另外,timeLeft var 是多余的。

      【讨论】:

        猜你喜欢
        • 2017-11-17
        • 2014-04-11
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多