2017-04-23 43 views
0

我從這個問題有這一行 - What is the correct syntax for this Elixir expression?Elixir中是否有一個工具可以顯示錶達式如何評估?

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

是否有藥劑的工具,可以顯示它是如何評估一個細分?

+2

我想你會更好的重構成多行,就像我在http://stackoverflow.com/a/43569911/320615中所做的那樣。這真的很難通過列表中間的長輸送表達來閱讀。 – Dogbert

+0

我是新來的這些列表處理函數,並會避免這種類型的代碼在每一天的使用。更多的是要了解這些Elixir短語是如何構建的,以便爲將來閱讀Haskell做準備)。 無論如何,我應該把第二個流水線命令放在一個單獨的行上,現在我已經這樣做了。我需要一個能夠告訴我這些表達如何分開和執行的工具。 – vfclists

+0

與其他語言相比,沒有使用括號來描述對我造成困難的表達式的各種元素。 – vfclists

回答

1

既然你面臨的主要問題似乎是在承認什麼參數傳遞給括號少函數調用是在複雜的表達式,您可以分析一個字符串藥劑AST(Code.string_to_quoted!/1)和背面(Macro.to_string/1),這將增加在有函數調用的地方使用明確的括號。

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)))"