Wie übergebe ich eine Funktion von arity 2 als Argument in Elixir für Enum.map?

8

Sagen wir, ich habe etwas wie:

%Vor%

Aber stattdessen möchte ich die Funktion String.duplicate / 2 als Argument übergeben, um meinen Code zu vereinfachen:

%Vor%

Ich weiß, Sie können es für Arity 1 Funktionen tun:

%Vor%

Danke!

    
Sasha Fonseca 13.11.2015, 15:32
quelle

1 Antwort

16

Sie können eine Funktion nicht an Enum.map mit einer Arity von 2 übergeben, da Enum.map Ihre Funktion mit jedem Element in der Liste als Argument aufruft. Wenn Sie eine andere Funktion wie Enum.reduce verwenden, erwartet sie eine Funktion mit einer Arity von 2.

Dies ist ein Beispiel für die Funktion String.downcase/1 , die mit jedem Element in der Liste aufgerufen wird:

%Vor%

In Ihrem Beispiel mit duplicate versuchen Sie String.duplicate/2 mit einem einzigen Argument (die Zeichenkette "FOO") aufzurufen.

Sie können die Capture-Syntax verwenden, um eine Funktion zu erstellen (dies ist eine Kurzform der Definition der von Ihnen bereitgestellten Funktion):

%Vor%

Sie können in Ihrem Modul auch eine benannte Funktion definieren, die nur ein Argument benötigt, zum Beispiel:

%Vor%     
Gazler 13.11.2015, 15:35
quelle