将变量参数传递给函数

时间:2014-11-08 11:54:49

标签: javascript variables coffeescript argument-passing

我设置了一个带有可变参数的函数:

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]

2 个答案:

答案 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?')

并且正确的事情将会发生。

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

答案 1 :(得分:1)

使用Function.apply

myfunc.apply @, [ "one", "two", "three" ]

Demo on CoffeeScript.org