KDB / Q Как создать пространство имен в функции

#kdb

Вопрос:

Я попытался создать функцию, которая принимает имя пространства имен, список ключей и список значений. Однако функция не может прочитать ключ и значение пространства имен.

Например:

 q) makens:{[ns,keylist,valuelist] temp_ns: x.keylist.valuelist; set[.ns;temp_ns]}
q) makens:[`hello;`age`gender;`10 "M"]
 

Я ожидаю, что мой результат будет:

 q) .hello
         | ::
age      | `10
gender   | "M"
 

Вместо этого пространство имен не работает, и когда я использую set в конце, оно не считывается .ns в качестве входных данных, т. Е.:

 q) makens:[`hello;`age`gender;`10 "M"]
q) .hello
'.hello
  [3]  .hello
       ^
q) .ns
`10`M
 

Ответ №1:

Вы можете использовать:

 q)makens:{[ns;keylist;valuelist](` sv `,ns) upsert ((`,keylist)!(::),valuelist)};
q)makens[`hello;`age`gender;`10,"M"]
`.hello
q).hello
      | ::
age   | `10
gender| "M"