gpt4 book ai didi

ruby - 有没有办法让 attr_reader 创建与实例变量名称不同的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:08:42 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com