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'
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
Puisque vous utilisez déjà Underscore.js avec CoffeeScript:
_(3).times -> console.log('hi')
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.
console.log 'hi' for[]in length:3
en utilisant lodash :
_.times 3, -> console.log 'hi'