2009-05-26 37 views
13

Cách tốt nhất để tạo bí danh cho một cá thể là thuộc tính trong Ruby (Tôi không sử dụng đường ray hoặc bất kỳ đá quý ruby ​​nào, chỉ cần, Ruby).
Ví dụ cho lớp học dưới đây, làm cách nào tôi có thể tạo bí danh cho người truy cập thuộc tính :student_name?Cách tốt nhất để tạo bí danh cho thuộc tính trong Ruby là gì?

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

Xin cảm ơn!

Trả lời

25

thêm

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

Như John chỉ ra, bạn cần phải bí danh cả người đọc và người viết. Đây là Ruby, khá dễ dàng để xác định phương thức bí danh của riêng bạn để xử lý điều này cho bạn.

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

Tôi rất tiếc t cầu kỳ ở đây nhưng tôi muốn gọi nó là alias_attr để phù hợp với alias_method. Bằng cách này cả hai sẽ có dạng alias_thingtoalias. –

Các vấn đề liên quan