kdb +/q:检查参数是否已提供给函数调用

Dan*_*ian 2 kdb q-lang

假设我们有fun两个参数的函数,第二个是可选的.如何在函数内检查是否已提供第二个可选参数并采取相应措施?

fun: {[x;optarg] $["optarg was supplied" like "optarg was supplied";"behavior 1"; "behavior 2"] }
fun[1;2] / behavior 1
fun[1]   / behavior 2
Run Code Online (Sandbox Code Playgroud)

```

小智 6

我不认为这是可能的.提供少于指定数量的参数会导致投影.

一个好的选择是让你的函数接受一个参数 - 一个列表.然后,您可以检查列表中每个元素的存在.

f:{[l] $[1=count[l]; 
             / do something with first arg only; 
             / do something with both args ] 
}
Run Code Online (Sandbox Code Playgroud)

或者您可以让函数接受字典(这允许您在函数中设置默认值).

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
Run Code Online (Sandbox Code Playgroud)