2017-06-15 1 views
0

je peux définir view soit par le script de chargement de aq, ou de façon interactive à partir de la console:[KDB +/Q]: (Re) définir vue par programme (dynamiquement)

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

Certains exploration:

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

Je vois que mon avis nouvellement conçu est maintenant partie du l'environnement mondial dictionnaire:

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

La partie de la valeur de cette paire valeur-clé est une liste des types lambda:

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

Même si {a+b} est de type lambda et ...

q)type {a+b} 
100h 

... la a+b et {a+b} ne sont pas la même chose:

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

question: maintenant que myview est défini dans l'environnement global, comment puis-je changer sa définition par programme, pour dire a+c expression lambda, en se référant à cette vue par son nom, c'est-à-dire `myview?

Par exemple, je veux traiter cette entrée:

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

Répondre

1

Vues ne sont pas analysable (voir la dernière ligne à http://code.kx.com/q/tutorials/views/) il semble que « l'utilisation de chaînes laid » est votre seule option:

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

Est-ce que quelque chose comme ça obtenir ce que vous cherchez?

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

grâce, aucune façon en utilisant des expressions plutôt que la manipulation de chaînes ? '' f ['myview; a + c] '' lancerait l'erreur 'c'. Et encapsuler l'expression dans les accolades '{a + c}' pour retarder l'évaluation est évidemment quelque chose d'autre. Je ne peux pas tourner la tête en manipulant le côté droit de 'myview | a + c' –