[KDB + / Q] :(重新)以编程方式(动态)定义视图

时间:2017-06-15 16:52:38

标签: kdb q-lang

我可以通过加载q脚本或从控制台交互式来定义view

q)myview::a+b                / even semi-programmatically using ugly strings: value"myview::a+b"

一些探索:

q)value `. `myview
::
(+;`a;`b)
`a`b
"a+b"

我可以看到我新设计的视图现在是全局环境字典的一部分:

q)select myview from `.
myview| a+b

该键值对的值部分是lambda类型列表:

q)-3!value select myview from `.
",a+b"
q) type first value select myview from `.
100h

即使{a+b}也是lambda类型......

q)type {a+b}
100h

... a+b{a+b}不是一回事:

q){a+b} ~ first value select myview from `.
0b

问题: 现在myview已在全局环境中定义,如何通过名称引用该视图,即a+c,以编程方式更改其定义,说`myview lambda表达式?

例如,我可能想要处理此输入:

q)config:()!(); config[`myview]:"a+c"

2 个答案:

答案 0 :(得分:1)

视图不可解析(请参阅http://code.kx.com/q/tutorials/views/的最后一行)所以看起来"使用丑陋的字符串"是你唯一的选择:

q)show config:`view1`view2!("a+b"; "c+d")
view1| "a+b"
view2| "c+d"
q)defView:{value string[x],"::",y}
q)defView'[key config; value config]
q)\b
`s#`view1`view2
q)view1
'b
q)a:1;b:2
q)view1
3

答案 1 :(得分:0)

这样的事情能实现你想要的吗?

q)f:{value "::" sv (string x;y)}
q)f[`myview;"a+b"]
q)select myview from `.
myview| a+b