CoffeeScript 递归函数
递归函数 问题 你想在一个函数中调用相同的函数。 解决方案 使用一个命名函数:ping = ->console.log "Pinged"setTimeout ping, 1000 若为未命名函数,则使用@arguments.callee@:delay = 1000setTimeout((->console.log "Pinged"setTimeout arguments.callee, delay), delay) 讨论 虽然arguments.call
递归函数 问题 你想在一个函数中调用相同的函数。 解决方案 使用一个命名函数:ping = ->console.log "Pinged"setTimeout ping, 1000 若为未命名函数,则使用@arguments.callee@:delay = 1000setTimeout((->console.log "Pinged"setTimeout arguments.callee, delay), delay) 讨论 虽然arguments.call
使用 Nodeunit 测试 问题 假如你正在使用CoffeeScript并且想要验证功能是否与预期一致,便可以决定使用Nodeunit测试框架。 讨论 Nodeunit是一种JavaScript对于单元测试库( Unit Testing libraries )中xUnit族的实现,Java, Python, Ruby, Smalltalk中均可以使用。 当使用xUnit族测试框架时,你需要将所需测试的描述预期功能的代码写在一个文件中。 例如,我们希望我们的计算器可以进行加法和减法,并且对于正负数均可以正
定义数组范围 问题 你想定义一个数组的范围。 解决方案 在CoffeeScript中,有两种方式定义数组元素的范围。myArray = [1..10] # => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]myArray = [1...10] # => [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] 要想反转元素的范围,则可以写成下面这样。myLargeArray = [10..1] # => [ 10, 9, 8, 7, 6, 5, 4, 3, 2,
平方根倒数快速算法 问题 你想快速计算某数的平方根倒数。 解决方案 在QuakeⅢ Arena的源代码中,这个奇怪的算法对一个幻数进行整数运算,来计算平方根倒数的浮点近似值。 在CoffeeScript中,他使用经典原始的变量,以及由Chris Lomont发现的新的最优32位幻数。除此之外,还使用64位大小的幻数。 另一特征是可以通过控制牛顿迭代法的迭代次数来改变其精确度。 相比于传统的,该算法在性能上更胜一筹,这归功于使用的机器及其精确度。 运行的时候使用coffee -c script.coffee
转换弧度和度 问题 你需要实现弧度和度之间的转换。 解决方案 使用JavaScript的Math.PI和一个简单的公式来转换两者。# 弧度转换成度 radiansToDegrees = (radians) ->degrees = radians * 180 / Math.PIradiansToDegrees(1) # => 57.29577951308232# 度转换成弧度 degreesToRadians = (degrees) ->radians = degrees * Math.P
计算月球的相位 问题 你想找出月球的相位。 解决方案 以下代码提供了一种计算给出日期的月球相位计算方案:# moonPhase.coffee# Moon-phase calculator # Roger W. Sinnott, Sky & Telescope, June 16, 2006 # http://www.skyandtelescope.com/observing/objects/javascript/moon_phases # # Translated to CoffeeScript b
把字符串转换为小写形式 问题 你想把字符串转换成小写形式。 解决方案 使用JavaScript的String的toLowerCase()方法:"ONE TWO THREE".toLowerCase() # => 'one two three' 讨论 toLowerCase()是一个标准的JavaScript方法。不要忘了带圆括号。 语法块 通过下面的快捷方式可以添加某种类似Ruby的语法块:String::downcase = -> @toLowerCase
服务器 问题 你想在网络上提供一个服务器。 解决方案 创建一个基本的TCP服务器。 在 Node.js 中net = require 'net'domain = 'localhost' port = 9001server = net.createServer (socket) ->console.log "Received connection from #{socket.remoteAddress}"socket.write "Hell