【发布时间】:2014-07-23 23:04:36
【问题描述】:
我需要在 q/kdb 中编写一个函数,它接受一个变量 v,如果 v 是则返回 1b 已定义,如果不是,则为 0b:
$ a:2
$ doesExist`a
1b
$ doesExist`b
0b
任何想法表示赞赏。
【问题讨论】:
标签: kdb
我需要在 q/kdb 中编写一个函数,它接受一个变量 v,如果 v 是则返回 1b 已定义,如果不是,则为 0b:
$ a:2
$ doesExist`a
1b
$ doesExist`b
0b
任何想法表示赞赏。
【问题讨论】:
标签: kdb
q)doesExist:{x~key x}
q)a:2
q)doesExist`a
1b
q)doesExist`b
0b
【讨论】:
value x 是一个键控表,key x 将返回一个表,而不是符号 x。
key`.
会给你当前命名空间中的所有变量。
同样
key`.foo
将为您提供.foo 命名空间中的所有变量。
通过扩展:
`a in key`.
会给你你所追求的布尔值
【讨论】:
根据 MdSalih 的回答和小册子的评论,也许我们可以测试相反的情况。由于如果未定义变量,则 key 会输出一个空列表,因此我们应该对此进行测试,从而解决键控表问题。
q)AnswerToLifeUniverseAndEverything:42
q)doesExist:{not () ~ key x}
q)doesExist[`AnswerToLifeUniverseAndEverything]
1b
q)doesExist[`UltimateQuestionToLifeUniverseAndEverything]
0b
【讨论】: