Существует ли краткий синтаксис для выполнения блока n времена в Scala?

SELECT cars,
       MAX( CASE item WHEN 'color'  THEN value END ) AS color,
       MAX( CASE item WHEN 'price'  THEN value END ) AS price,
       MAX( CASE item WHEN 'wheels' THEN value END ) AS wheels
FROM   Cars
GROUP BY cars;

Выходы:

CARS     PRICE COLOR  WHEELS
-------- ----- ------ ------
lambo    7     yellow 5
mercedes 6     black  4
bmw      5     red    4
49
задан Craig P. Motlin 16 May 2010 в 04:40
поделиться

4 ответа

Вы можете легко определить один, используя шаблон Pimp My Library.

scala> implicit def intWithTimes(n: Int) = new {        
     |   def times(f: => Unit) = 1 to n foreach {_ => f}
     | }
intWithTimes: (n: Int)java.lang.Object{def times(f: => Unit): Unit}

scala> 5 times {
     |   println("Hello World")
     | }
Hello World
Hello World
Hello World
Hello World
Hello World
50
ответ дан 7 November 2019 в 11:31
поделиться
def times(f: => Unit)(cnt:Int) :Unit = {
  List.fill(cnt){f}
}
0
ответ дан 7 November 2019 в 11:31
поделиться

В классе Range есть метод foreach, который, я думаю, именно то, что вам нужно. Например, такой:

 0.to(5).foreach(println(_))

произвел

0
1
2
3
4
5

36
ответ дан 7 November 2019 в 11:31
поделиться

Я ничего не знаю в библиотеке. Вы можете определить неявное преобразование служебной программы и класс, который можно импортировать по мере необходимости.

class TimesRepeat(n:Int) {
  def timesRepeat(block: => Unit): Unit = (1 to n) foreach { i => block }
}
object TimesRepeat {
  implicit def toTimesRepeat(n:Int) = new TimesRepeat(n)
}

import TimesRepeat._

3.timesRepeat(println("foo"))

Рахул только что отправил аналогичный ответ, пока я писал это ...

5
ответ дан 7 November 2019 в 11:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: