2015-07-20 16 views
5

È possibile scrivere la funzione parametrizzata utilizzando la notazione &?Elixir: scrittura della funzione parametrizzata tramite & Notazione

Ecco un esempio di funzione con parametri da Programmazione Elisir libro di Dave Thomas

title = fn (title) -> (fn (name) -> title <> " " <> name end) end 

mrs = title.("Mrs.") 
IO.puts mrs.("Rose") 

uscita del programma di cui sopra è:

Mrs. Rose 
[Finished in 0.6s] 

Può title essere scritte usando & notazione ? Esempio di notazione & sotto

iex> square = &(&1 * &1) 
#Function<6.17052888 in :erl_eval.expr/5> 

iex> square.(8) 
64 

risposta

9

Come @Gazler correttamente suggerito questo non è possibile a causa di limitazioni di sintassi, ma è possibile ottenere un risultato simile con applicazione parziale. La differenza qui è che la funzione title restituirà un risultato direttamente, invece di restituire una funzione. La funzione mrs può quindi eseguire un'applicazione parziale "precompilando" il primo argomento.

title = &(&1 <> " " <> &2) 
mrs = &title.("Mrs.", &1) 
IO.puts mrs.("Rose") 
+0

Interessante. Grazie –

+1

L'applicazione parziale è un trucco pulito. – Gazler

6

Questo non sarà possibile. Il tentativo di utilizzare la cattura (&) sintassi di funzione in una funzione dichiarata con la sintassi di acquisizione genererà un CompileError

iex(1)> &(&(&1))  
** (CompileError) iex:2: nested captures via & are not allowed: &&1 
    (elixir) src/elixir_fn.erl:108: :elixir_fn.do_capture/4 
    (elixir) src/elixir_exp.erl:229: :elixir_exp.expand/2 
    (elixir) src/elixir_exp.erl:10: :elixir_exp.expand/2 
Problemi correlati