2015-11-13 7 views

risposta

15

Non è possibile passare una funzione a Enum.map con un'associazione di 2 come Enum.map chiama la funzione con ciascun elemento nell'elenco come argomento. Se si utilizza un altro funzione come Enum.reduce quindi si aspetta una funzione con un arity di 2.

Questo è un esempio della funzione String.downcase/1 essere chiamato con ogni elemento dell'elenco:

Enum.map(["FOO", "BAR", "BAZ"], fn(x) -> String.downcase(x) end) 
# String.downcase("FOO") 
# String.downcase("BAR") 
# String.downcase("BAZ") 

Nel tuo esempio con duplicato, stai provando a chiamare String.duplicate/2 con un singolo argomento (la stringa "FOO").

È possibile utilizzare la sintassi di acquisizione per creare una funzione (questo è un modo veloce per definire la funzione che hai fornito):

Enum.map([1,2,3], &String.duplicate("a", &1)) 

È inoltre possibile definire una funzione denominata nel vostro modulo che richiede un solo argomento , per esempio:

Enum.map([1, 2, 3], &duplicate_foo/1) 

def duplicate_foo(times), do: String.duplicate("a", times) 
+1

piccola aggiunta: Nel tuo secondo esempio, è possibile omettere un livello di parentesi in questo modo: 'Enum.map ([1,2,3], e String.duplicate ("a", & 1)) ' –

Problemi correlati