2017-06-15 19 views
0

Iのいずれか、または対話式コンソールからローディング水溶液スクリプトによって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であることグローバル環境で定義されている場合、そのビューを名前で参照することによって、つまり`myviewというように、その定義をプログラムで、つまりa+cラムダ式に変更するにはどうすればよいですか?例えば

、私は、この入力を処理することもできます。

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 | myviewの右側を操作して頭を上げることはできません。 a + c' –

関連する問題