Equivalent Ruby .times in Coffeescript

前端 未结 3 2141
[愿得一人]
[愿得一人] 2021-02-11 13:39

What is the most concise equivalent Coffeescript to the following:

# ruby    
3.times { puts \'hi\' }

?

The best I could think of is:

相关标签:
3条回答
  • 2021-02-11 14:01

    Since you're already using Underscore.js along with CoffeeScript:

    _(3).times -> console.log('hi')
    
    0 讨论(0)
  • 2021-02-11 14:07

    JavaScript arrays (at least the modern ones) have a forEach method and CoffeeScript [1..3] ranges are arrays so you could do this:

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

    One warning though: this might be a bit hard on the browser if your n in [1..n] is large as you'll be building a large array just to get a convenient notation; but if n is small then the overhead of building the array shouldn't matter that much.

    0 讨论(0)
  • 2021-02-11 14:08
    console.log 'hi' for [1..3]
    

    To also handle 0 correctly:

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

    Or with prototype magic:

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

    Note that the second method isn't recommended because changing the Number prototype has global effects.

    Edit: Changed according to @BrianGenisio's comment (.prototype. -> ::)

    Edit 2: fixed handling of 0, thanks @Brandon

    0 讨论(0)
提交回复
热议问题