我可以通过加载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"
答案 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