2009-05-26 10 views
13

Quelle est la meilleure façon de créer un alias à un attribut d'instance dans Ruby (je n'utilise pas de rails ou de rubis gem, juste, Ruby).
Par exemple, étant donné la classe ci-dessous, comment puis-je créer un alias pour les accesseurs d'attribut :student_name?Quelle est la meilleure façon de créer un alias aux attributs dans Ruby?

class Student 
    attr_accessor :student_name 
    alias :name :student_name #wrong 
end 

s = Student.new 
s.student_name = "Jordan" 
puts s.name # --> Jordan 
s.name = "Michael" # --> NoMethodError: undefined method `name=' for #<Student:0x572394> ... 

Merci les gars!

Répondre

25

ajouter

alias :name :student_name # not wrong, only for getter 
alias :name= :student_name= # add this for setter 
10

Comme John souligne, vous devez créer un alias à la fois le lecteur et l'écrivain. Ceci étant Ruby, il est assez facile de définir votre propre méthode d'alias pour gérer cela pour vous.

class Module 
    def attr_alias(new_attr, original) 
    alias_method(new_attr, original) if method_defined? original 
    new_writer = "#{new_attr}=" 
    original_writer = "#{original}=" 
    alias_method(new_writer, original_writer) if method_defined? original_writer 
    end 
end 
+1

Je suis jus t être pointilleux ici mais je préférerais l'appeler alias_attr pour être cohérent avec alias_method. De cette façon, les deux seraient de la forme alias_thingtoalias. –

Questions connexes