Come si possono passare due argomenti a un metodo con una firma a argomento singolo?

StackOverflow https://stackoverflow.com/questions/1435400

  •  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 ?

È stato utile?

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
scroll top