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)
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)) ' –