Coffeescript函数中的可选参数

时间:2013-06-13 18:05:01

标签: function coffeescript

我一直看到有签名的功能

some_fn arg1, arg2, [optional], cb

这是怎么做到的?

1 个答案:

答案 0 :(得分:2)

jQuery一直在做这类事情,on for example

  

.on(events [,selector] [,data],handler(eventObject))

它的工作方式是内部可选参数和最终参数具有不同的类型,因此函数可以使用arguments手动解析typeof(或类似但更松散的检查,如各种{{3 })弄清楚它是如何被调用的。如果可能的参数列表中存在多个相同类型的内容,那么您将在混合中进行长度检查以尝试找出其意图。

例如:

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'))

演示:is* functions in Underscore

更多CoffeeScript-ish版本将使用...而不是直接处理arguments

f = (args...) ->
    if(typeof args[0] == 'function')
        args[0]()
    else
        console.log("#{args[0]} is not a function")

演示:http://jsfiddle.net/ambiguous/c6UwC/