如何覆盖参数的默认值?
我有以下function签名:
question: (question_id, onComplete, use_redis = true) ->
我假设我可以覆盖use_redis
参数为false,但我所尝试的一切还没有奏效。 这是可能的,如果我定义我的onComplete
callback内联? 这就是我对函数的调用:
Summaryresults.question 1, (summary) -> answer_data.summary = summary done()
我试过添加几个不同的方法,但没有任何工作。 我是否需要在其他地方定义我的callback函数,然后引用它,而不是定义它内联,以覆盖use_redis
?
应该这样工作:
Summaryresults.question 1, (summary) -> answer_data.summary = summary done() , false
第一个参数是id,第二个是你的callback函数,第三个设置use_redis为false
编辑 – 我的解决scheme,以改变API:
question: (id, options...) -> [use_redis, onComplete] = options if typeof use_redis is "function" onComplete = options use_redis = true
在调用这个函数时,你应该总是把你的callback函数作为LAST参数:
没有use_redis-param:
Summaryresults.question 1, (summary) -> answer_data.summary = summary done()
用use_redis-param:
Summaryresults.question 1, false, (summary) -> answer_data.summary = summary done()
通常情况下,您希望callback是最后一个参数,否则语法会变得不稳定。
那么为什么不改变你的API呢?
question: (question_id, options = {}) -> onComplete = options.onComplete useRedis = options.useRedis ? true # ... Summaryresults.question 1, useRedis: false onComplete: -> answer_data.summary = summary done()
看看有多可读性呢?
但是,这就是说,你可以在正确的位置用一个时髦的逗号来调用
Summaryresults.question 1, (summary) -> answer_data.summary = summary done() , false
编译为:
Summaryresults.question(1, function(summary) { answer_data.summary = summary; return done(); }, false);
也许
hollaback = (summary) -> answer_data.summary = summary done() Summaryresults.question 1, hollaback, false