2

fun2 つの引数を持つ関数があるとします。2 番目の引数はオプションです。関数内で 2 番目のオプションの引数が指定されているかどうかを確認し、それに応じて動作する方法は?

fun: {[x;optarg] $["optarg was supplied" like "optarg was supplied";"behavior 1"; "behavior 2"] }
fun[1;2] / behavior 1
fun[1]   / behavior 2

```

4

3 に答える 3

6

これは不可能だと思います。指定された数よりも少ない数の引数を指定すると、プロジェクションが発生します。

良い代替案は、関数に 1 つの引数 (リスト) を受け入れるようにすることです。そして、リストの各要素の存在を確認できます。

f:{[l] $[1=count[l]; 
             / do something with first arg only; 
             / do something with both args ] 
}

または、関数が辞書を受け入れるようにすることもできます (これにより、関数にデフォルト値を設定できます)。

q)f:{[dict] def:`a`b`c!10 20 30; 
            def:def upsert dict; 
            :def[`a] + def[`b] + def[`c] }


q)f[`a`b!5 10]
45

q)f[`a`c!5 10]
35
于 2015-04-17T16:56:26.640 に答える