在Ruby中为实例属性创建别名的最佳方法是什么(我不使用rails或任何ruby gem,只是Ruby)。
例如,给定下面的类,如何为:student_name
属性访问器创建别名?
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> ...
谢谢你们!
答案 0 :(得分:28)
添加
alias :name :student_name # not wrong, only for getter
alias :name= :student_name= # add this for setter
答案 1 :(得分:12)
正如约翰所指出的,你需要为读者和作者添加别名。这是Ruby,很容易定义自己的别名方法来处理这个问题。
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
答案 2 :(得分:9)
对于Rails
alias_attribute new_name, old_name
使用案例当您(很可能)想要更改属性名称而不更改架构且不破坏现有功能时