2009-05-26 9 views
13

Was ist der beste Weg, um einen Alias ​​zu einem Instanzattribut in Ruby zu erstellen (ich verwende keine Rails oder Ruby Gem, Ruby).
Zum Beispiel angesichts der folgenden Klasse, wie kann ich einen Alias ​​für die :student_name Attribut Accessoren erstellen?Was ist der beste Weg, um einen Alias ​​für Attribute in Ruby zu erstellen?

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> ... 

Danke Jungs!

Antwort

25

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

hinzufügen Wie John weist darauf hin, Sie sowohl den Leser und den Autor an Alias ​​müssen. Da es sich um Ruby handelt, ist es sehr einfach, eine eigene Alias-Methode zu definieren, die das für Sie erledigt.

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

Ich bin jus Ich bin hier wählerisch, aber ich würde es lieber alias_attr nennen, um mit alias_method konsistent zu sein. Auf diese Weise würden beide von der Form alias_thingtoalias sein. –

Verwandte Themen