2015-02-20 9 views
5

Questo funziona:Dare send-il metodo di oggetto di un altro metodo con il blocco

Beer.all.send(:sort) 

ed inoltre funziona con il blocco:

Beer.all.sort_by{|b| b.name} 
Beer.all.sort_by(&:name) 

Ma quando do un blocco eseguibile per l'invio metodo simile this:

Beer.all.send(:sort_by{|b| b.name}) 
Beer.all.send(:sort_by(&:name)) 

Errore di sintassi. C'è un modo alternativo in Ruby per dare un blocco eseguibile al metodo send?

+0

Si prega di leggere Rubino primo a sapere come animali funzionano –

+0

Se si desidera passare un argomento in modo, allora di solito è impossibile. –

+2

Pensi che ': sort_by {| b | b.name} 'è un oggetto Ruby' Symbol' valido? –

risposta

4

si dovrebbe provare qualcosa di simile:

Beer.all.send(:sort_by) {|b| b.name} 
0

blocchi sono argomenti speciali in Ruby, non sono passati insieme con gli argomenti regolari all'interno delle parentesi. Questo non ha nulla a che fare in particolare con send. send è solo un metodo come qualsiasi altro metodo, dopotutto, non può cambiare la sintassi di Ruby.

blocchi sono passati dopo tutti gli altri argomenti, vale a dire in questo modo:

foo.bar(baz, qux) {|sillyname| do_stuff } 
Problemi correlati