静的なアイテムのセットを合体させるのは簡単です。
var finalValue = configValue || "default"; # JavaScript
finalValue = configValue ? "default" # CoffeeScript
しかし、未知の長さの配列を合体させる簡単な方法はありますか?私が思いついた最も簡単なものはこれ(CoffeeScript)でした:
coalesce = (args) -> args.reduce (arg) -> arg if arg?
coalesce [1, 2] # Prints 1
単純なリストの場合は問題ありませんが、
- 理想的に
coalesce
は繰り返し処理する必要がありますが、をarguments
サポートしていません。reduce
- 配列に関数が含まれている場合は、関数自体ではなく戻り値を返したい場合があります(これは私のユースケースです)。
Guffaのソリューションに基づいて、CoffeeScriptバージョンを次に示します。
coalesce = (args) -> args[0]() ? coalesce args[1..]
テストインcoffee
:
fun1 = ->
console.log 1
null
fun2 = ->
console.log 2
2
fun3 = ->
console.log 3
3
coalesce [fun1, fun2, fun3]
プリント
1 # Log
2 # Log
2 # Return value