2009-05-26 11 views
13

¿Cuál es la mejor manera de crear un alias para un atributo de instancia en Ruby (no estoy usando rieles ni ninguna gema de rubí, simplemente, Ruby).
Por ejemplo, dada la clase siguiente, ¿cómo puedo crear un alias para los accesores de atributo :student_name?¿Cuál es la mejor manera de crear alias a los atributos en 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> ... 

¡Gracias chicos!

Respuesta

25

añadir

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

Como señala John, es necesario poner un alias para el lector y el escritor. Siendo Ruby, es bastante fácil definir tu propio método de alias para manejar esto por ti.

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

Soy jus Estoy siendo quisquilloso aquí, pero preferiría llamarlo alias_attr para ser consistente con alias_method. De esta manera, ambos serían de la forma alias_toaltoalias. –

Cuestiones relacionadas