2009-05-26 16 views
13

Qual è il modo migliore per creare un alias su un'istanza assegnata in Ruby (non sto usando le rotaie o qualsiasi gemma rubino, solo, Ruby).
Ad esempio, data la classe di seguito, come posso creare un alias per gli accessors degli attributi :student_name? di ragazziQual è il modo migliore per creare un alias per gli attributi in 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> ... 

grazie!

risposta

25

aggiungere

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

Come John fa notare, è necessario alias sia il lettore e lo scrittore. Essendo Ruby, è abbastanza facile definire il proprio metodo di alias per gestirlo per te.

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

I'm jus essere pignoli qui, ma preferirei chiamarlo alias_attr per essere coerenti con alias_method. In questo modo entrambi sarebbero della forma alias_thingtoalias. –

Problemi correlati