112 votes

Comment définir une méthode sur une ligne dans Ruby?

def greet; puts "hello"; end le seul moyen de définir une méthode sur une ligne en Ruby?

122voto

banister Points 13181

Vous pouvez éviter le recours aux points-virgules si vous utilisez des parenthèses:

 def hello() :hello end
 

99voto

Sergey Alekseev Points 1700

Juste donner le drap de réponse:

En général, évitez de simples méthodes en ligne. Bien qu'ils soient quelque peu populaires dans la nature, il y a quelques particularités à propos de leur définition de syntaxe qui rendent leur utilisation indésirable. En tout cas, il devrait être pas plus d'une expression dans une seule méthode de ligne.

# 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

Une exception à la règle sont vides-les méthodes du corps.

# good
def no_op; end

De bbatsov/ruby-style-guide.

41voto

edgerunner Points 9581
 def add a,b; a+b end
 

Le point-virgule est le terminateur d'instruction en ligne pour Ruby

Ou vous pouvez utiliser la méthode define_method . (Edit: Celui-ci est déconseillé dans Ruby 1.9)

 define_method(:add) {|a,b| a+b }
 

9voto

Victor Deryagin Points 5382

Autrement:

 define_method(:greet) { puts 'hello' }
 

Peut être utilisé si vous ne souhaitez pas entrer une nouvelle portée pour la méthode lors de sa définition.

7voto

Josh D Points 319

Encore une autre manière:

 def greet() return 'Hello' end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X