【发布时间】:2017-07-08 11:01:33
【问题描述】:
Scala 新手试图实现一个名为“counter”的方法,其方法签名如下。
该方法应该是一个无状态函数,这样当使用整数 n 调用它时,它会返回一个有状态函数。这个有状态的函数在第一次被调用时应该返回 n,然后是 n + 1,然后是 n + 2,等等。
计数器必须是独立的,这样运行 counter(1) 两次会产生两个不会干扰彼此状态的函数。
以下是我目前所拥有的:
val counter : Int => () => Int = {
// Complete definition below.
var count = 0
n: Int => () => {
var returnVal = n + count
count = count + 1
returnVal
}
}
如何调用计数器的示例:
assert ({
val k1 : () => Int = counter (1)
val k2 : () => Int = counter (2)
val r1 : Int = k1 ()
val r2 : Int = k1 ()
val r3 : Int = k2 ()
val r4 : Int = k2 ()
val r5 : Int = k2 ()
val r6 : Int = k1 ()
(r1, r2, r3, r4, r5, r6)
} === (1, 2, 2, 3, 4, 3)
)
运行断言时,我的计数器实现返回 (1, 2, 4, 5, 6, 6)。
我相信这是因为 k1 和 k2 都指向同一个计数变量。但是,我不知道如何根据要求为 k1 和 k2 提供它们自己单独的计数变量,以便它们“不会干扰彼此的状态”。
我在正确的轨道上吗?任何指导将不胜感激。
【问题讨论】: