У меня есть функция, которая выглядит следующим образом:Scala - сочинить функция п раз
def emulate: (Cpu => Cpu) => (Cpu => Cpu) = render => {
handleOpcode andThen
handleTimers andThen
handleInput andThen
debug andThen
render
}
Я хочу, чтобы вызвать функцию handleOpcode п число раз (скажем, в 10 раз). В Haskell я мог бы написать функцию, например, так:
ntimes n f = foldr (.) id (replicate n f)
Но в Scala, я не знаю, как я мог бы написать. Я пробовал:
def nTimes(n: Int, f: => Any) = {
val l = List.fill(n)(f)
l.foldRight(identity[Function]){ (x, y) => y.andThen(x) }
}
, но все типы неправильные.
Есть ли простой способ достичь этого? В идеале без необходимости создавать свою собственную функцию. Возможно, что-то в Скаласе?
Ну, 'f' не является функцией там, это просто нестрогий' Any', поэтому неудивительно, что типы все не так. Почему бы вам не начать писать типы так же, как в Haskell? –