2017-01-17 10 views
3

Bei einem Julia-Objekt vom zusammengesetzten Typ, wie kann man seine Felder bestimmen?Wie bekomme ich Felder eines Julia-Objekts?

Ich kenne eine Lösung, wenn Sie in der REPL arbeiten: Zuerst Sie die Art des Objekts über einen Aufruf typeof herauszufinden, dann geben Sie Hilfemodus (?) und dann den Typ nachschlagen. Gibt es einen programmatischen Weg, um dasselbe zu erreichen?

+0

ein Hack, den ich verwende: an der REPL, für das Objekt 'x', tippe' x.' (das ist 'x' gefolgt von einem Punkt' .') und dann TAB oder zweimal drücken. Das fordert Julia auf, den Befehl automatisch zu vervollständigen. Julia zeigt dir dann die Felder von 'x', vorausgesetzt, dass es welche hat. –

Antwort

7

Verwenden Sie fieldnames(x), wobei x entweder eine Instanz des zusammengesetzten Typs ist, an dem Sie interessiert sind, oder andernfalls eine DataType. Das heißt, fieldnames(today()) und fieldnames(Date) haben die gleiche Ausgabe. Dies gibt Vector{Symbol} zurück, die die Feldnamen in Reihenfolge auflisten.

Um die Werte in einem dieser Felder abzurufen, verwenden Sie entweder getfield(x, field_name_here) oder die Shortcut-Syntax x.field_name_here.

Eine weitere nützliche und verwandte Funktion zum Spielen ist dump(x).

Ich bin sicher, ich habe eine andere Frage, die eine ziemlich enge Kopie dieses auf StackOverflow ist, gesehen, aber eine schnelle Suche ergab nichts. Wenn es jemand weiß, verlinke es bitte in den Kommentaren.

+0

Beachten Sie, dass die Antwort auch in der [Julia Dokumentation] (http://docs.julaulang.org/en/release-0.4/manual/types/#composite-types) erscheint. –

1

nehme an, das Objekt obj ist,

Sie alle Informationen seiner Felder mit folgenden Codeausschnitt bekommen:

T = typeof(obj) 
for (name, typ) in zip(fieldnames(T), T.types) 
    println("type of the fieldname $name is $typ") 
end 

Hier fieldnames(T) gibt den Vektor der Feldnamen und T.types gibt den entsprechenden Vektor der Art der Felder.

Verwandte Themen