Wie

2014-07-06 19 views
38

eine anonyme Funktion mit dem Rohr in Elixir passieren würde Ich mag den Code wie folgt schreiben:Wie

def boundary do 
    :crypto.rand_bytes(8) 
    |> Base.encode16 
    |> &("--------FormDataBoundary" <> &1) 
end 

Aber es funktioniert nicht.

Antwort

58

Es wird etwas seltsam aussehen, aber arbeiten müssen:

def boundary do 
    :crypto.rand_bytes(8) 
    |> Base.encode16 
    |> (&("--------FormDataBoundary" <> &1)).() 
end 
+0

Diese kann mein Problem lösen. – ruisin

+3

Gibt es einen Grund dafür, dass es so komisch ist? Wenn ich eine Funktion an eine Pipe übergebe, behandle ich sie eher wie eine Variable (ja, ich komme aus Javascript), aber doing (fn).() Sieht so aus, als würde ich sie sofort aufrufen, was ich nicht bin. – leitasat

+0

@leiitasat Siehe http://stackoverflow.com/a/18023790/4376 –

7

Verwandte: Wenn die „anonymous“ Funktion einer Variablen zugewiesen wurde, können Sie Rohr, um es wie folgt aus:

def boundary do 
    add_marker = fn (s) -> 
    "--------FormDataBoundary" <> s 
    end 

    :crypto.rand_bytes(8) 
    |> Base.encode16 
    |> add_marker.() 
end