Каков наиболее краткий эквивалент Coffeescript для следующего:
# ruby
3.times { puts 'hi' }
?
Лучшее, о чем я мог подумать:
# coffeescript
for n in [1..3]
console.log 'hi'
Ответ 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 мало, то накладные расходы на создание массива не должны иметь большого значения.