Подтвердить что ты не робот

Эквивалентный Ruby. В Coffeescript

Каков наиболее краткий эквивалент Coffeescript для следующего:

# ruby    
3.times { puts 'hi' }

?

Лучшее, о чем я мог подумать:

# coffeescript
for n in [1..3]
  console.log 'hi'
4b9b3361

Ответ 1

console.log 'hi' for [1..3]

Для правильной обработки 0:

console.log 'hi' for [1..n] if n

Или с магией прототипа:

Number::times = (fn) ->
  do fn for [[email protected]()] if @valueOf()
  return
3.times -> console.log 'hi'

Обратите внимание, что второй метод не рекомендуется, так как изменение прототипа Number имеет глобальные эффекты.

Изменить: Изменено в соответствии с комментарием @BrianGenisio (.prototype.::)

Изменить 2: исправлена ​​обработка 0, спасибо @Brandon

Ответ 2

Поскольку вы уже используете Underscore.js вместе с CoffeeScript:

_(3).times -> console.log('hi')

Ответ 3

Матрицы JavaScript (по крайней мере, современные) имеют forEach, а диапазоны CoffeeScript [1..3] - это массивы, поэтому вы можете сделать это:

[1..3].forEach -> console.log 'hi'

Одно предупреждение: это может быть немного сложнее в браузере, если ваш n в [1..n] большой, поскольку вы будете строить большой массив, чтобы получить удобную нотацию; но если n мало, то накладные расходы на создание массива не должны иметь большого значения.

Ответ 4

console.log 'hi' for[]in length:3

Ответ 5

используя lodash:

_.times 3, -> console.log 'hi'