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 中的作用是啥?

Coffeescript 和 jQuery 无法在特定视图上使用 Ruby on Rails

在Ruby 2.3.3中查找哪个小部件具有焦点