Frage Wie implementiert man die Abfragefunktion?


1. Tabelle1:

([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.Schreiben Sie eine einfache Funktion, um Tabelle1 Daten auszuwählen

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.test 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

Als ich einen Params zum Testen benutzte:api[(enlist[`extraCols]!enlist(`Species))] Aber Ergebnis Typ Fehler.In meiner begrenzten Erfahrung damit. Könnten Sie mir bitte helfen, dies zu verstehen? Vielen Dank.

Und ich will unten Ergebnis bekommen und wie ich meine API ändern kann

ID Name  Client    Species
1    A     B       setosa
2    B     Q       setosa
3    C     S       setosa

5
2018-05-25 05:23


Ursprung


Antworten:


Ich stelle mir das vor type Fehler kommt von der Aussage in Ihrem if Bedingung:

if[`extraCols in key Params;
 defaultCols:defaultCols,Params[`extraCols]!Params `extraCols]

Sie erstellen ein Wörterbuch Params[`extraCols]!Params `extraCols

Wenn nur ein Element vorhanden ist Params`extraCols dann müßten Sie dies beim Erstellen des Wörterbuchs eintragen, um einen solchen Typfehler zu vermeiden, d.h.

enlist[Params`extraCols]!enlist Params`extraCols

Es lohnt sich auch, einen Breakpoint in die Funktion einzufügen, um die Art der Argumente zu überprüfen und sich selbst zu debuggen. Das solltest du dann sehen können Params`extraCols ist der Atom  `Species (sollte Typ haben -11h) statt einer Liste.


6
2018-05-25 06:27