Как реализовать функцию запроса?
1.Таблица 1:
([ID:`1`2`3]Name:`A`B`C;Client:`P`Q`S;ClientType:`QW`DS`WW;NameType:`jj`ll`oo;Basket:`QD`IO`LK;Sepal:5.1 4.5 23.5;Length:2 34 6;Species:`setosa`setosa`setosa)
2.напишите простую функцию для выбора данных таблицы 1
api:{[Params]
if [Params~();Params:()!()];
defaultCols:`ID`Name`Client!(`ID`Name`Client);
if[`extraCols in key Params;
defaultCols:defaultCols,Params[`extraCols]!Params `extraCols];
: ?[ select from table1;();0b;defaultCols];
}
3.тест api[(enlist[`extraCols]!enlist(`Species`Length))]
ID Name Client Species Length
1 A B setosa 2
2 B Q setosa 34
3 C S setosa 6
Когда я использовал один Params для тестирования: api[(enlist[`extraCols]!enlist(`Species))]
Но тип результата error.In мой ограниченный опыт в этом вопросе . Не могли бы вы помочь мне понять это? спасибо.
И я хочу получить ниже результат и как изменить мой api
ID Name Client Species
1 A B setosa
2 B Q setosa
3 C S setosa
1 ответ:
Я полагаю, что ошибка
typeисходит из утверждения в вашемifусловии:if[`extraCols in key Params; defaultCols:defaultCols,Params[`extraCols]!Params `extraCols]Вы создаете словарь
Params[`extraCols]!Params `extraColsЕсли есть только один элемент в
Params`extraCols, то вам нужно будет включить его при создании словаря, чтобы избежать такой ошибки типа, т. е.:
enlist[Params`extraCols]!enlist Params`extraColsТакже стоит поместить точку останова внутри функции, чтобы проверить тип аргументов и дать себе возможность выполнить отладку. Тогда вы сможете увидеть, что
Params`extraColsявляется ли атом`Species(должен иметь тип-11h), а не список.
Comments