Coffeescript 中等效的 Ruby .times
Posted
技术标签:
【中文标题】Coffeescript 中等效的 Ruby .times【英文标题】:Equivalent Ruby .times in Coffeescript 【发布时间】:2011-12-22 07:54:34 【问题描述】:与以下内容最简洁等效的 Coffeescript 是什么:
# ruby
3.times puts 'hi'
?
我能想到的最好的是:
# coffeescript
for n in [1..3]
console.log 'hi'
【问题讨论】:
你放的sn-p怎么了? 他并不是说这有什么问题;他在寻求最简洁的表达方式。 【参考方案1】: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
【讨论】:
我选择了这个答案,因为它只使用 Coffeescript。 请注意,这个原型魔法是由Sugar.js 库添加的。真的,使用原型魔法并没有什么问题,只要你的应用程序的一部分在做它——所以你不会有不同的东西期待不同的原型魔法。 只是为了玩一下,我建议使用 CoffeeScripts::
operator: Number::times = (fn) ->
这是 CoffeeScript 方式 :)
@TrevorBurnham:+1 提到 Sugar.js;我以前从未听说过。看起来很有用。谢谢!
范围实际上应该是 [0...@valueOf()]。按照目前的写法,@valueOf() 等于 1 时,fn 被调用 0 次,@valueOf() 等于 0 时,fn 被调用 1 次。【参考方案2】:
由于您已经在使用 Underscore.js 和 CoffeeScript:
_(3).times -> console.log('hi')
【讨论】:
是的,我正在使用 underscore.js tokland - 你的答案实际上是我将在我的代码中使用的答案,因为我使用了 underscore.js,但我选择了@thejh 的答案,因为我的问题是关于 Coffeescript。很抱歉,我无法选择你的答案。 =( @NicolasGoy SyntaxError on line 1:large
是一个形容词。无法构建large
。
@anthropomorphic 我删除了我的评论,我不知道我想说什么。
@NicolasGoy 我也是。我依稀记得写过那条评论。请放心,它很聪明。【参考方案3】:
javascript 数组(至少是现代数组)有一个 forEach
方法,CoffeeScript [1..3]
范围是数组,所以你可以这样做:
[1..3].forEach -> console.log 'hi'
但有一个警告:如果您在 [1..n]
中的 n
很大,那么这在浏览器上可能会有点困难,因为您将构建一个大数组只是为了获得方便的符号;但是如果n
很小,那么构建数组的开销应该不会那么重要。
【讨论】:
现在它产生 TypeError: (intermediate value).apply(...).foreach is not a function @RuslanLópezCarro 你确定吗? Seems fine 给我。 哦,我的错,很好的解决方案【参考方案4】:console.log 'hi' for[]in length:3
【讨论】:
woosh... 别告诉我你真的用过它! :) 我看不懂这段代码。你能解释一下它是如何工作的吗? 它虽然有效。它生成以下 JavaScript:_ref = length: 3 ; for (_j = 0, _len = _ref.length; _j < _len; _j++) _ref[_j]; console.log('hi');
console.log 'hi' for _ in length:3
在我看来更具可读性。它非常hacky,但很容易理解它的作用。它还可以正确处理0
,而无需额外的if
。【参考方案5】:
使用lodash:
_.times 3, -> console.log 'hi'
【讨论】:
以上是关于Coffeescript 中等效的 Ruby .times的主要内容,如果未能解决你的问题,请参考以下文章
CoffeeScript - 如何在 ruby on rails 中使用咖啡脚本?
Ruby 哈希是不是可以包含在 Sass 和 CoffeeScript 中,从而允许共享数据?
ruby on rails 中的 Coffeescript 编译错误
Javascript / jQuery / Coffeescript 在 Ruby on Rails 中的作用是啥?