存在q/kdb中的函数

Vir*_*iya 7 kdb

我需要在q/kdb中编写一个函数,它接受一个变量v,如果v被定义则返回1b,如果不是则返回0b:

$ a:2
$ doesExist`a
1b
$ doesExist`b
0b
Run Code Online (Sandbox Code Playgroud)

任何想法都赞赏.

MdS*_*lih 10

q)doesExist:{x~key x}
q)a:2
q)doesExist`a
    1b
q)doesExist`b
    0b
Run Code Online (Sandbox Code Playgroud)

  • 这可能有效,也可能无效,具体取决于x引用的项目类型.例如,如果`value x`是一个键控表,`key x`将返回一个表,而不是符号x. (2认同)

Man*_*tel 6

key`.
Run Code Online (Sandbox Code Playgroud)

将为您提供当前命名空间中的所有变量.

同样

key`.foo
Run Code Online (Sandbox Code Playgroud)

将为您提供.foo命名空间中的所有变量.

通过扩展:

`a in key`.
Run Code Online (Sandbox Code Playgroud)

会给你你想要的布尔值


小智 5

根据MdSalih的回答和小册子的评论,也许我们可以检验相反的结果。由于如果未定义变量,那么key将输出一个空列表,因此我们应该对此进行测试,以解决键表问题。

q)AnswerToLifeUniverseAndEverything:42
q)doesExist:{not () ~ key x}
q)doesExist[`AnswerToLifeUniverseAndEverything]
1b
q)doesExist[`UltimateQuestionToLifeUniverseAndEverything]
0b
Run Code Online (Sandbox Code Playgroud)

  • 但如果它是一个空字典则不然 (2认同)