2014-07-23 2 views
4

Je dois écrire une fonction q/KDB qui prend une variable v et retourne 1b si v est défini et 0b si ce n'est pas:Existant fonction q/KDB

$ a:2 
$ doesExist`a 
1b 
$ doesExist`b 
0b 

Toutes les idées ont apprécié.

Répondre

7
q)doesExist:{x~key x} 
q)a:2 
q)doesExist`a 
    1b 
q)doesExist`b 
    0b 
+2

Cela peut fonctionner ou non, selon le type d'élément référencé par x. Par exemple, si 'value x' est une table à clé,' key x' retournera une table, pas le symbole x. – pamphlet

+0

Merci! c'est une commande extrêmement utile aussi pour vérifier si une table existe! –

3
key`. 

Vous donnera toutes les variables dans l'espace de noms actuel.

De même

key`.foo 

vous donnera toutes les variables de l'espace de noms .foo.

Par extension:

`a in key`. 

vous donnera la valeur booléenne que vous êtes après

3

Sur la base de la réponse de MdSalih et le commentaire de brochure, peut-être que nous pouvons tester le contraire. Puisque la clé produit une liste vide si la variable n'est pas définie, nous devrions tester cela, ce qui nous permet de contourner le problème de la table à clés.

q)AnswerToLifeUniverseAndEverything:42 
q)doesExist:{not() ~ key x} 
q)doesExist[`AnswerToLifeUniverseAndEverything] 
1b 
q)doesExist[`UltimateQuestionToLifeUniverseAndEverything] 
0b 
+0

Belle addition! C'est très pratique. –