Ich teile eine Zeichenfolge auf einem Zeichen und möchte alle Elemente in der resultierenden Aufteilung trimmen. Ich würde erwarten, dass die folgenden arbeiten, wie String.trim/1
existiert:Wie ordne ich eine bestimmte Funktion über eine Werteliste zu?
iex> "My delimited ! string of doom" |> String.split("!") |> Enum.map(String.trim)
** (UndefinedFunctionError) function String.trim/0 is undefined or private. Did you mean one of:
* trim/1
* trim/2
(elixir) String.trim()
Ich erhalte eine UndefinedFunctionError
, welche die Funktion String.trim/0
nicht vorhanden ist.
iex> "My delimited ! string of doom" |> String.split("!") |> Enum.map(fn (word) -> String.trim(word) end)
["My delimited", "string of doom"]
Hat Enum.map/2
erfordern eine anonyme Funktion als zweiter Parameter: Was ich will, ist mit einer anonymen Funktion übergeben Enum.map
leicht zu bewerkstelligen? Kann ich meine gewünschte Funktion als Parameter angeben?
Während @TheAnhLe Sie die richtige Antwort gegeben hat, ich denke, dass es fraglich ist, ob die aufgenommene Funktion der Code „besser“ macht. Ich meine, ich denke, die anonyme Funktion macht den Code ein wenig einfacher zu verstehen, aber YMMV. –
@OnorioCatenacci Gibt es veröffentlichte Elixir Style Guides oder eine Illustration des idiomatischen Elixirs zum Übergeben von Funktionen als Argumente? Ich bin an Bord, um sauberen und prägnanten Code zu schreiben. –
Es gibt das: https://github.com/levionessa/elixir_style_guide, aber es befasst sich nicht wirklich mit der Frage der Verwendung eines Capture im Gegensatz zu einer anonymen Funktion (zumindest soweit ich weiß). –