54 votes

Rails argument facultatif

j'ai un cours

 class Person
    attr_accessor :name,:age
    def initialize(name,age)
        @name = name
        @age = age
    end
end

J'aimerais rendre l'âge facultatif, donc c'est 0 s'il n'est pas passé, ou le nom doit être vide s'il n'est pas passé

J'ai fait quelques recherches dessus, mais c'est un peu déroutant quant à ce que j'ai trouvé (devoir passer des variables dans une autre variable { }).

9voto

bodacious Points 2322

Si vous voulez que les deux arguments soient facultatifs mais que vous définissiez également des valeurs par défaut lorsque nil, vous pouvez utiliser :

classe Personne

 def initialize(name = nil, age = 0)
  @name ||= "Default name"
  @age = age
end

finir

Cela résout le problème de passer nil comme première option tout en obtenant toujours une valeur par défaut utilisable.

 @person = Person.new nil, 30
@person.name # => "Default name"
@person.age # => 30

4voto

Ryan Bigg Points 64561

C'est plus un truc de Ruby. Vous pouvez définir des arguments facultatifs pour une méthode comme celle-ci :

 def initialize(name="", age=0)
  @name = name
  @age = age
end

En procédant de cette façon, vous pourrez appeler Person.new , puis avoir le nom par défaut sur une chaîne vide s'il n'est pas transmis et l'âge par défaut sur 0. Si vous voulez que l'âge soit quelque chose mais que le nom soit vide vous devrez quand même passer une chaîne vide :

 Person.new("", 24)

3voto

S.M.Mousavi Points 704

Utilisez le hachage pour ruby 1.8/1.9 comme suit :

 def myMethod(options={})
  @email = options[:email]
  @phone = options[:phone]
end

# sample usage
myMethod({:email => "example@email.ir", :phone => "0098-511-12345678"})

Également sur ruby 2.0/2.1, vous pouvez utiliser des arguments de mot-clé comme suit :

 def myMethod(email: 'default@email.ir', phone: '0098-000-00000000')
  @email = email
  @phone = phone
end

# sample usage
myMethod(email: "example@email.ir", phone: "0098-511-12345678")

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