2017-06-15 18 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' –