web-dev-qa-db-fra.com

Équivalent Ruby. Fois dans Coffeescript

Quel est l'équivalent Coffeescript le plus concis par rapport à ce qui suit:

# Ruby    
3.times { puts 'hi' }

?

Le mieux que je puisse penser est:

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

Pour gérer également 0 correctement:

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

Ou avec un prototype de magie:

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

Notez que la seconde méthode n'est pas recommandée car la modification du prototype Number a des effets globaux.

Edit: Modifié en fonction du commentaire de @ BrianGenisio (.prototype. -> ::)

Edit 2: correction du traitement de 0, merci @Brandon

57
thejh

Puisque vous utilisez déjà Underscore.js avec CoffeeScript:

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

Les tableaux JavaScript (au moins les plus modernes) ont une gamme forEach et CoffeeScript [1..3] sont des tableaux afin que vous puissiez le faire:

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

Un avertissement cependant: cela peut être un peu dur pour le navigateur si votre n dans [1..n] est grand, car vous allez construire un grand tableau juste pour obtenir une notation commode; mais si n est petit, les frais généraux liés à la construction du tableau ne devraient pas avoir autant d'importance.

8
mu is too short
console.log 'hi' for[]in length:3
0
matyr

en utilisant lodash :

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