Я пытаюсь создать новую конструкцию, которая может называться так:
myFunc(10) { println("hello") }
и печатать 10 раз "hello".
"hello"
Как мне добиться это?
Вам нужно использовать параметры по имени (это странно => во втором списке аргументов), чтобы сделать это:
=>
def myFunc(count:Int)(todo: => Unit) = (0 until count).foreach(_ => todo) //or def myFunc(count:Int)(todo: => Unit) = for (c <- 0 until count) todo
подробнее об этом https://docs.scala-lang.org/tour/by-name-parameters.html
https://scalafiddle.io/sf/hoQjz2L/0
Вы можете использовать параметр по имени для создания встроенной подобной конструкции:
def runTimes(n: Int)(r: => Unit) = for(i <- 0 until n) r
Вы можете использовать его так, как хотите:
runTimes(10) { println("hi") }
Мне удалось сделать следующее:
def myFunc(x: =>Int)(body: =>Unit):Unit = { if(x == 0) { () } else { body myFunc(x-1)(body) } }