2017-04-23 1 views
0

Ich habe diesen Einstrich aus dieser Frage - What is the correct syntax for this Elixir expression?. Gibt es ein Tool in Elixir, das eine Aufschlüsselung anzeigen kann, wie ein Ausdruck ausgewertet wird?

|> (fn l ->[?[, Enum.map(l, &([inspect(&1, limit: :infinity), ?\n])) \ 
|> Enum.intersperse(?,), ?]] end).() 

Gibt es ein Werkzeug in Elixir, die eine Aufschlüsselung, wie angezeigt werden kann ausgewertet wird?

+2

Ich denke, Sie wären besser dran Refaktorierung in mehrere Zeilen wie ich in http://stackoverflow.com/a/43569911/320615. Das ist wirklich schwer zu lesen mit dem langen Pipe-Ausdruck in der Mitte einer Liste. – Dogbert

+0

Ich bin neu in diesen Listenverarbeitungsfunktionen und würde diese Art von Code im täglichen Gebrauch vermeiden. Es ist mehr zu verstehen, wie diese Elixier-Phrasen konstruiert werden, um mich darauf vorzubereiten, in Zukunft Haskell zu lesen;). In jedem Fall hätte ich den zweiten Pipeline-Befehl auf eine separate Zeile setzen sollen und ich habe es jetzt getan. Mein Bedürfnis nach einem Werkzeug, das mir zeigt, wie diese Ausdrücke geteilt und ausgeführt werden, bleibt bestehen. – vfclists

+0

Verglichen mit anderen Sprachen ist es die Abwesenheit von Klammern, um die verschiedenen Elemente von Ausdrücken abzugrenzen, die Schwierigkeiten für mich verursachen. – vfclists

Antwort

1

Da das Hauptproblem Sie Gesicht zu erkennen, was die Argumente einer Klammern losen Funktionsaufruf sind in komplexen Ausdrücken zu sein scheint, können Sie einen String Elixir AST analysieren (Code.string_to_quoted!/1) und zurück (Macro.to_string/1), das fügt explizite Klammern, wo immer ein Funktionsaufruf ist.

iex(1)> "a B.c |> D.e + f g h + i" |> Code.string_to_quoted! |> Macro.to_string 
"a(B.c() |> D.e() + f(g(h + i)))" 
Verwandte Themen