CoffeeScript:设置析构参数的默认值

时间:2014-10-23 02:48:42

标签: javascript function coffeescript underscore.js lodash

在CoffeeScript中,我可以设置函数参数的默认值,如下所示:

func = (one = 'one') ->

但是如何像这样传递对象时如何设置默认值:

func = ({ one }) ->

执行以下赢得工作,例如:

func = ({ one: 'one' }) ->

我愿意使用像Lo-Dash这样的外部库,它提供_.defaults。所以我可以做到以下几点:

func = (args) ->
  _.defaults args, { one: 'one' }
  { one } = args

但是我的口味有点长。特别是,我想简化它,以便只提及one键/变量一次。这使我在更改函数参数时更有用。

例如,是否有另一种我可以使用的方法,可能在另一个库中(当然,最好是已存在于LoDash中的一个),它将使用对象的键作为新的特定结构对象变量名?

1 个答案:

答案 0 :(得分:0)

不幸的是,你必须在函数内部分配它。

func =({one})->
  one ?= 1
  one

func(one: 2) #=> 2
func()  #=> 1

使用lowdash,您也可以在函数调用中执行此操作,当然

func _.defaults(ags, {one: 1})

取决于用例,这是可以接受的。

然后你也可以使用部分申请

func = ({one})-> one

func1 = (fn, supplied)->
  (args)-> fn(_.defaults(args, supplied))

myFun = func1(func, one: 1)
myFun(foo: 'foo') #=> 1
myFun(one: 2) #=> 2