【问题标题】:coffee-script loop efficiency咖啡脚本循环效率
【发布时间】:2012-05-04 18:50:20
【问题描述】:

超级简单的coffeescript问题

circles = []
for coordinate, i in coordinates
    circles[i] = new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx) 

这行得通。但我知道,使用 candy 语法,可能有甚至更咖啡色的方式来写这个。有没有办法不用i来写这个?

【问题讨论】:

    标签: coffeescript


    【解决方案1】:

    规范的 CoffeeScript 方式是使用 for 推导,它会返回一个数组:

    circles = for coordinate in coordinates
      new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx)
    

    或者,在一行中:

    circles = (new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx) for coordinate in coordinates)
    

    Loops and Comprehensions:

    请注意,由于我们在上面的示例中将推导的值分配给一个变量,CoffeeScript 将每次迭代的结果收集到一个数组中。

    【讨论】:

    • 是的,我查看了官方文档,很难理解。感谢您通知我。
    • 括号是不必要的。
    【解决方案2】:
    circles.push(new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx))
    

    ;)

    【讨论】:

      【解决方案3】:

      更多的“coffeescriptish”写在一行上:

      circles = []
      circles[i] = new MakeCircle(cnBlue, coor.x, coor.y, 16, 8, 0, theCanvas.ctx) for coor, i in coordinates
      

      您可以在使用 push 时删除 i

      circles = []
      mc = (x,y) -> new MakeCircle cnBlue,x,y,16,8,0,theCanvas.ctx
      circles.push mc(coor.x,coor.y) for coor in coordinates
      

      【讨论】:

        【解决方案4】:

        您可以随时使用jQuery map:

        circles = jQuery.map(coordinates, 
            (coordinate) -> new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx)
        )
        

        我以前从未真正编写过 CoffeeScript,如果没有按原样编译,敬请见谅。这绝对是一种更“实用”的方式来做你想做的事,我认为这是现代 javascript。

        【讨论】:

        • 在现代浏览器/javascript 中,map 方法也可用于 array 对象。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-18
        • 2015-12-12
        • 2012-06-14
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 2019-02-23
        相关资源
        最近更新 更多