我有一个包含20多个属性的类,我希望每个属性都是公开可读的,如果没有那么公开。
我似乎无法找到与此相关的任何数据。有人可以帮我吗?
我想公开所有这些内容,而无需使用attr_reader输入所有20多个属性。
答案 0 :(得分:1)
您可以使用method_missing
执行此操作。只要有人试图调用您的课程不知道如何回应的方法,就会调用method_missing
。
class Foo
def initialize
@a = 1
@b = 2
@c = 3
end
def respond_to_missing?(name)
super || has_attribute?(name)
end
def method_missing(name, *args)
if has_attribute?(name)
instance_variable_get("@#{name}")
else
super
end
end
private
def has_attribute?(name)
instance_variable_defined?("@#{name}")
end
end
以下是您使用时的样子
foo = Foo.new
p foo.a # => 1
p foo.b # => 2
p foo.c # => 3
p foo.d # => method_missing error
注意:对于早于1.9.2的Ruby:Override respond_to?
instead of respond_to_missing?