Эквивалентный Ruby .times в Coffeescript - PullRequest
41 голосов
/ 04 ноября 2011

Что является самым кратким эквивалентом Coffeescript к следующему:

# ruby    
3.times { puts 'hi' }

?

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

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

Ответы [ 5 ]

58 голосов
/ 05 ноября 2011
console.log 'hi' for [1..3]

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

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

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

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

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

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

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

32 голосов
/ 05 ноября 2011

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

_(3).times -> console.log('hi')
8 голосов
/ 05 ноября 2011

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

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

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

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

с использованием lodash :

_.times 3, -> console.log 'hi'
0 голосов
/ 05 ноября 2011
console.log 'hi' for[]in length:3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...