Function Coffeescript函数中的可选参数
我一直在看带有签名的函数Function Coffeescript函数中的可选参数,function,coffeescript,Function,Coffeescript,我一直在看带有签名的函数 一些参数arg1、arg2、[可选]cb 这是怎么做到的?jQuery一直都在做这类事情: .on(事件[,选择器][,数据],处理程序(事件对象)) 它的工作方式是,内部可选参数和最终参数具有不同的类型,因此该函数可以使用手工解析(或类似但较松散的检查,如各种)来确定如何调用它。如果在可能的参数列表中有多个相同类型的东西,那么您应该在混合中抛出一个长度检查,以尝试找出意图是什么 例如: f = () -> args = Array::slice.appl
一些参数arg1、arg2、[可选]cb
这是怎么做到的?jQuery一直都在做这类事情: .on(事件[,选择器][,数据],处理程序(事件对象)) 它的工作方式是,内部可选参数和最终参数具有不同的类型,因此该函数可以使用手工解析(或类似但较松散的检查,如各种)来确定如何调用它。如果在可能的参数列表中有多个相同类型的东西,那么您应该在混合中抛出一个长度检查,以尝试找出意图是什么 例如:
f = () ->
args = Array::slice.apply(arguments)
if(typeof args[0] == 'function')
args[0]()
else
console.log("#{args[0]} is not a function")
f(1, 2, 3)
f(-> console.log('pancakes'))
演示:
一个更具CoffeeScript风格的版本将使用..
而不是直接处理参数
:
f = (args...) ->
if(typeof args[0] == 'function')
args[0]()
else
console.log("#{args[0]} is not a function")
演示:您在哪里看到的?通常,可选参数在最后。在本例中,哪些参数应该是可选的,哪些参数应该是强制性的?aww的有趣用法splat@Alexis至于为什么使用这个参数形式,把一个匿名函数放在参数列表中间是非常丑陋和视觉上混淆的。(是的
setTimeout
和setInterval
这样做,但这些签名(IMO)是错误的,会导致大量看起来很糟糕的代码)。