我设置了一个带有可变参数的函数:
myfunc: (cmd, args...)->
# cmd is a string
# args is an array
可以这样称呼:
myfunc("one") # cmd = "one", args = undefined
myfunc("one","two") # cmd = "one", args = ["two"]
# etc...
现在,如果我想用未知数量的参数调用它,该怎么办?
假设我想传递一组args而不是arg1, arg2, arg3,..
这怎么可能?
尝试myfunc("one",["two","three"])
或myfunc("one",someArgs)
会导致不幸:
# cmd = "one"
# args = [ ["two","three"] ];
想法?
P.S。我通过在我的函数中添加这些超简单的线条来实现这一点。但是没有别的办法吗?
if args? and args[0] instanceof Array
args = args[0]
答案 0 :(得分:3)
您不需要为此手动使用Function.prototype.apply
。可以在参数列表中使用Splats来构建数组,也可以在函数调用中使用以扩展数组;来自the fine manual:
<强>提示图标... 强>
[...] CoffeeScript提供了splats
...
,用于函数定义和调用,使得可变数量的参数更加可口。awardMedals = (first, second, others...) -> #... contenders = [ #... ] awardMedals contenders...
所以你可以这样说:
f('one')
f('one', 'two')
f('one', ['two', 'three']...)
# same as f('one', 'two', 'three')
args = ['where', 'is', 'pancakes', 'house?']
f(args...)
# same as f('where', 'is', 'pancakes', 'house?')
并且正确的事情将会发生。
答案 1 :(得分:1)