2015-02-01 3 views
13

Ich habe ein einfaches Modul eine einzelne Funktion enthält:Wie kann ich eine Modulfunktion in Enum.map aufrufen, ohne den Fehler "Undefined reference" zu erhalten?

defmodule Funcs do 

    def double(x) do 
    x*2 
    end 

end 

Wenn ich iex mit dem Dateinamen als Argument starten, die ich anrufen kann die Funktion nur in Ordnung:

iex(5)> Funcs.double(3) 
6 

Aber wenn ich versuche, verwenden sie es in Enum.map, ich einen undefined function Fehler:

iex(2)> Enum.map([1,2,3,4], Funcs.double) 
** (UndefinedFunctionError) undefined function: Funcs.double/0 
    Funcs.double() 

während, wenn ich ein analoges verwenden nur ous anonyme Funktion, funktioniert alles wie erwartet:

iex(6)> Enum.map([1,2,3,4], fn(x) -> x*2; end) 
[2, 4, 6, 8] 

Wie kann ich eine Modulfunktion (nicht sicher, ob das der richtige Begriff ist) verwenden, als Argument an Enum.map?

+1

Ich habe einen Link zu den Dokumenten für das '&' spezielle Formular zu meiner Antwort hinzugefügt, sorry, dass ich nicht vorher, aber ich war auf dem Handy. – whatyouhide

+0

Perfekt, vielen Dank. –

Antwort

22

Die Syntax für die Erfassung nichtanonymer Funktionen verwendet &function/arity.

In Ihrem Beispiel:

Enum.map([1,2,3,4], &Funcs.double/1) 

Sie können mehr über die Capture-Syntax lesen (was in Elixir ist sehr häufig) in the docs for the & special form.

Verwandte Themen