Come si possono passare due argomenti a un metodo con una firma a argomento singolo?
-
07-07-2019 - |
Domanda
s = Proc.new {|x|x*2}
def one_arg(x)
puts yield(x)
end
one_arg(5, &s)
Come fa one_arg
a sapere di & amp; s
?
Soluzione
L'operatore & amp;
trasforma Proc in un blocco, quindi diventa un metodo a argomento singolo con un blocco (che viene chiamato con yield
). Se avessi lasciato il & amp;
in modo che passasse direttamente al Proc, avresti ricevuto un errore.
Altri suggerimenti
Eseguendo il & amp; s
, stai dicendo a one_arg
che desideri che i tuoi s
Proc vengano passati come blocco (per favore correggimi se sbaglio). Una scrittura equivalente sarebbe
one_arg(5) do |x|
x *2
end
Ci sono state alcune domande qui su SO a partire da quel momento. August Lilleaas ha un bel scrivi su alcune delle complessità di tutta questa follia di Ruby.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow