È def greet; puts "hello"; end
l'unico modo per definire un metodo su una riga in Ruby?
È def greet; puts "hello"; end
l'unico modo per definire un metodo su una riga in Ruby?
Risposte:
Puoi evitare la necessità di usare il punto e virgola se usi le parentesi:
def hello() :hello end
Basta dare la risposta completa e fresca:
In generale, evitare metodi a riga singola. Sebbene siano piuttosto popolari in natura, ci sono alcune peculiarità nella loro sintassi di definizione che ne rendono indesiderabile l'uso. In ogni caso, non dovrebbe esserci più di un'espressione in un metodo a riga singola .
# bad
def too_much; something; something_else; end
# okish - notice that the first ; is required
def no_braces_method; body end
# okish - notice that the second ; is optional
def no_braces_method; body; end
# okish - valid syntax, but no ; make it kind of hard to read
def some_method() body end
# good
def some_method
body
end
Un'eccezione alla regola sono i metodi del corpo vuoto.
# good
def no_op; end
def add a,b; a+b end
Il punto e virgola è il terminatore dell'istruzione inline per Ruby
Oppure puoi usare il define_method
metodo. (Modifica: questo è deprecato in Ruby 1.9)
define_method(:add) {|a,b| a+b }
Un altro modo:
define_method(:greet) { puts 'hello' }
Può essere utilizzato se non si desidera immettere un nuovo ambito per il metodo durante la definizione.
define_method
è stato "privatizzato" in Ruby 1.9
Ancora un altro modo:
def greet() return 'Hello' end
return
qui dato che non è una clausola di guardia.
return
può aggiungere leggibilità per chi è meno esperto (o familiare) di Ruby. E 'una di quelle misura con le pinze le cose ...