Rufen Sie den Methodeninhalt als Ausdruck ab

Harrison Grodin

Ich habe eine Funktion fwie folgt definiert.

f(x, y) = 3x^2 + x*y - 2y + 1

Wie kann ich den folgenden quoteBlock für diese Methode abrufen , der den Funktionsinhalt enthält?

quote  # REPL[0], line 2:
    ((3 * x ^ 2 + x * y) - 2y) + 1
end
Matt B.

Wie die Leute in den Kommentaren erwähnt haben, ist das Durchsuchen der Felder dieser Methoden keine stabile oder offiziell unterstützte API. Außerdem täuscht Ihr einfaches Beispiel. Dies ist im Allgemeinen nicht repräsentativ für den ursprünglichen Code, den Sie für die Methode geschrieben haben. Es handelt sich um eine vereinfachte AST-Zwischendarstellung mit Variablen für die Einzelzuweisung und einem drastisch vereinfachten Kontrollfluss. Im Allgemeinen ist der zurückgegebene AST kein gültiger Julia-Code der obersten Ebene. Es kommt einfach so vor, dass es für Ihr einfaches Beispiel so ist.

Es gibt jedoch einen dokumentierten Weg, dies zu tun. Sie können verwenden code_lowered(), um Zugriff auf diese Zwischendarstellung zu erhalten, ohne in undokumentierten Feldern zu stöbern. Dies wird in allen Julia-Versionen funktionieren, aber ich glaube, es gibt noch keine offiziellen Garantien für die Stabilität der Zwischendarstellung. Hier ist ein etwas komplizierteres Beispiel:

julia> f(X) = for elt in X; println(elt); end
f (generic function with 1 method)

julia> code_lowered(f)[1]
LambdaInfo template for f(X) at REPL[17]:1
:(begin
        nothing
        SSAValue(0) = X
        #temp# = (Base.start)(SSAValue(0))
        4:
        unless !((Base.done)(SSAValue(0),#temp#)) goto 13
        SSAValue(1) = (Base.next)(SSAValue(0),#temp#)
        elt = (Core.getfield)(SSAValue(1),1)
        #temp# = (Core.getfield)(SSAValue(1),2) # line 1:
        (Main.println)(elt)
        11:
        goto 4
        13:
        return
    end)

julia> code_lowered(f)[1] == methods(f).ms[1].lambda_template
true

Wenn Sie den Code wirklich genau so sehen möchten, wie er geschrieben wurde, verwenden Sie am besten die eingebetteten Datei- und Zeileninformationen und verweisen auf die Originalquelle. Beachten Sie, dass Gallium.jl (Julias Debugger) genau auf diese Weise die Quelle findet, die beim Durchlaufen von Funktionen angezeigt werden soll. Es ist nicht dokumentiert, aber Sie können sogar auf den REPL-Verlauf für interaktiv definierte Funktionen zugreifen. Sehen Sie hier, wie Gallium das macht .

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Lesen Sie den Ausdruck mit fgets und rufen Sie die numerischen Werte mit sscanf ab

Rufen Sie den Wert aus dem Fold-Ausdruck "cascading ifs" ab

Rufen Sie den Eigenschaftsnamen aus dem Lambda-Ausdruck in TypeScript ab

So rufen Sie den aktuellen Monat im SSRS-Ausdruck ab

Rufen Sie den Abfragewert in den Triggertext ab

Rufen Sie den Wert mehrerer Dropdowns eines Formulars ab und senden Sie ihn als Abfragezeichenfolge in jquery

Rufen Sie den Unterordner als Spalte ab, während Sie mit SparkSQL mehrere Parkettdateien lesen

Rufen Sie den Wert der Variablen ab und weisen Sie ihn als Attribut in C# zu

Rufen Sie den Sitzungswert ab und übergeben Sie ihn als erforderlichen Parameter von API Ajax

Speichern Sie den Bildpfad in NSDocuments und rufen Sie ihn als UIImage ab

Rufen Sie den geplanten Cron-Ausdruck für den Spring Boot von einer externen JAR-Datei ab

Rufen Sie den Controller von einem anderen Controller mit dem Objekt als Parameter auf und rufen Sie die Antwort ab

Verwenden Sie Zeichenfolgen in quo () und rufen Sie den Ausdruck in der Zeichenfolge selbst im rlang-Paket ab

Rufen Sie den Verzeichnispfad im Array of Objects als Zeichenfolge aus dem Verzeichnispfad ab

So rufen Sie sowohl den Datensatz 1 Woche nach dem Datum als auch die Gesamtsumme ab

Rufen Sie den gesamten Speicher mit weniger als 10% freiem Speicherplatz ab

Rufen Sie den gesamten Dateiinhalt als Zeichenfolge statt wortweise ab - Linux-Befehl

Rufen Sie den tatsächlichen Namen einer Swift-Variablen als Zeichenfolge ab

Rufen Sie den Namen der aufgerufenen Methode aus der Klassenliste als Zeichenfolge ab

Rufen Sie den varbinären Wert als BASE64 in MSSQL ab

So rufen Sie den Objektwert aus der als json gespeicherten Datenbank ab

Rufen Sie den Ländernamen in einer anderen Sprache als der systemweit ausgewählten Sprache ab

Rufen Sie den MD5-Hashcode (als Zeichenfolge) für eine bestimmte Datei in C # ab

Rufen Sie den JSON-Wert mit Schlüssel in Punktnotation als Text in JS ab

Rufen Sie den Syntaxbaum von SymbolAnalysisContext ab

Rufen Sie den Namen in MySQL ab

Rufen Sie den Ressourcenordnerpfad eines Bildes ab

Rufen Sie den Klassenfeldnamen in Java ab

Rufen Sie den Testnamen in TestNG ab

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv