Передать по имени в Scala - PullRequest
       0

Передать по имени в Scala

0 голосов
/ 06 апреля 2020

Я пытаюсь создать новую конструкцию, которая может называться так:

myFunc(10) {
   println("hello")
}

и печатать 10 раз "hello".

Как мне добиться это?

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Вам нужно использовать параметры по имени (это странно => во втором списке аргументов), чтобы сделать это:

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

1 голос
/ 06 апреля 2020

Вы можете использовать параметр по имени для создания встроенной подобной конструкции:

 def runTimes(n: Int)(r: => Unit) = for(i <- 0 until n) r

Вы можете использовать его так, как хотите:

runTimes(10) {
  println("hi")
}
0 голосов
/ 06 апреля 2020

Мне удалось сделать следующее:

def myFunc(x: =>Int)(body: =>Unit):Unit = {
    if(x == 0) { () } else {
        body
        myFunc(x-1)(body)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...