在CoffeeScript中,我可以设置函数参数的默认值,如下所示:
func = (one = 'one') ->
但是如何像这样传递对象时如何设置默认值:
func = ({ one }) ->
执行以下赢得工作,例如:
func = ({ one: 'one' }) ->
我愿意使用像Lo-Dash这样的外部库,它提供_.defaults。所以我可以做到以下几点:
func = (args) ->
_.defaults args, { one: 'one' }
{ one } = args
但是我的口味有点长。特别是,我想简化它,以便只提及one
键/变量一次。这使我在更改函数参数时更有用。
例如,是否有另一种我可以使用的方法,可能在另一个库中(当然,最好是已存在于LoDash中的一个),它将使用对象的键作为新的特定结构对象变量名?
答案 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