在 Ruby 中,有没有办法做类似的事情
class Foo
attr_reader :var_name :reader_name #This won't work, of course
def initialize
@var_name = 0
end
end
# stuff here ....
def my_method
foo = Foo.new
assert_equal 0,foo.reader_name
end
换句话说,是否有一种标准方法可以为使用与变量不同名称的变量创建访问器方法。 (当然,除了手工编码。)
最佳答案
你可以使用 alias_method
:
class Foo
attr_reader :var_name
alias_method :reader_name, :var_name
def initialize
@var_name = 0
end
end
attr_reader
构建的var_name
方法仍然可用。你可以使用 remove_method
如果你真的想摆脱 var_name
方法(但要确保你以正确的顺序获得所有内容):
class Foo
attr_reader :var_name
alias_method :reader_name, :var_name
remove_method :var_name
def initialize
@var_name = 0
end
end
如果你真的想要,你可以将 attr_reader_as
方法修补到模块中:
class Module
def attr_reader_as(attr_name, alias_name)
attr_reader attr_name
alias_method alias_name, attr_name
remove_method attr_name
end
end
class Foo
attr_reader_as :var_name, :reader_name
def initialize
@var_name = 0
end
end
更好的 attr_reader_as
会采用散列(例如 { var_name: :reader_name, var_name: :reader_name2}
),但我会把它留给读者作为练习.
关于ruby - 有没有办法让 attr_reader 创建与实例变量名称不同的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5772457/