Scala newbie пытается реализовать метод с именем «counter», подпись метода которого ниже.Scala: отдельные состояния переменной count внутри возвращаемого метода
Метод должен быть функцией без состояния, так что, когда он вызывается с целым числом n, он возвращает функцию состояния. Эта функция состояния должна возвращать n при ее первом вызове, затем n + 1, затем n + 2 и т. Д.
Счетчики должны быть независимыми, чтобы сработавший счетчик (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 свою собственную отдельную переменную счетчика, чтобы они «не мешали друг другу», согласно требованиям.
Есть ли я на правильном пути? Любые рекомендации будут оценены наиболее высоко.
Это сработало отлично. Спасибо! – shoogazer
Не то, чтобы это было важно здесь, но я бы сделал 'returnVal'' val'. –
Хороший звонок @ Джаспер-М. – bergren2