2017-06-15 53 views
0

我可以通过加载水溶液脚本,或交互地从控制台限定view[KDB +/Q]:(重新)定义视图编程(动态地)

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 

该键值对的值部分是λ-类型的列表:即使

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

{a+b}是λ型,以及...

q)type {a+b} 
100h 

...的a+b{a+b}不同样的事情:

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

问: 现在myview是在全球环境中定义,我如何通过编程方式改变它的定义,比如a+c lambda表达式,通过引用该视图的名称,即`myview

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

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

回答

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 
0

是否像这样实现你在找什么?

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

感谢,使用表达式而不是字符串操作任何方式? ''F ['MyView的; a + c]''会抛出''c''错误。并且用大括号'{a + c}'封装表达式以延迟评估显然是别的。无法控制myview |的右手边A + C' –