2015-04-18 12 views
5

So che si può passare un singolo list a una funzione e quindi iterare su quello. Tuttavia, preferisco avere funzioni con una firma più esplicita. Quindi quello che sto davvero cercando di sapere è se Elixir ha qualcosa che è equivalente all'oggetto arguments in Javascript.C'è un modo per iterare su tutti gli argomenti passati a una funzione in Elixir?

Per quanto posso dire la risposta è no. Il più vicino che ho visto in una discussione su questo argomento era nella risposta allo this question.

Il motivo per cui sto cercando questa funzionalità è che mi sono trovato diverse volte ad applicare la stessa conversione a più argomenti ed è un po 'noioso. Potrebbe essere implementato tramite una macro, forse?

risposta

11

Questo è possibile, ma vorrei raramente usarlo:

chiamando binding() nella parte superiore della funzione vi darà un elenco di parole chiave dei binding di perimetro ed i loro valori, che sarebbero gli argomenti se si chiama è la prima riga della tua funzione, ovvero:

iex(6)> defmodule Mod do 
...(6)> def args(a, b, c) do 
...(6)>  for {arg, val} <- binding() do 
...(6)>  IO.puts "#{arg} = #{inspect val}" 
...(6)>  end 
...(6)> end 
...(6)> end 


iex(7)> Mod.args(1,2,3) 
a = 1 
b = 2 
c = 3 
[:ok, :ok, :ok] 
+2

Ci sono degli svantaggi? O stilisticamente o praticamente? Sembra essere esattamente quello che volevo. È documentato da qualche parte? –

+0

Penso che questo sia esattamente quello che stai cercando. http://elixir-lang.org/docs/stable/elixir/Kernel.html#binding/1 –

Problemi correlati