所以如果有这个代码:
class A
def initialize(type)
@type = type
end
end
instance = A.new(2)
another_instance = A.new(1)
array = [instance, another_instance]
有没有办法检查array
是否包含A
@type
等于某个值的实例?说,2?像include?
方法,但它不是检查某个类的实例,而是检查该类的实例变量?
答案 0 :(得分:2)
我建议您使用attr_reader
,除非您打算在之后的某处修改type
(在这种情况下使用attr_accessor
,这既是作家又是读者)
class A
attr_reader :type
def initialize(type)
@type = type
end
end
instance = A.new(2)
another_instance = A.new(1)
array = [instance, another_instance]
array.select do |item|
item.type == 2
end
=>[#<A:0x00000000dc3ea8 @type=2>]
我在这里迭代A
的一系列实例,只选择满足条件的item.type == 2
答案 1 :(得分:1)
您只需引用实例变量即可。
> array.any? { |item| item.is_a?(A) }
=> true
> array.any? { |item| item.instance_variable_get(:@type) == 1 }
=> true
> array.select { |item| item.instance_variable_get(:@type) == 1 }
=> [#<A:0x007fba7a12c6b8 @type=1>]
或者,在课堂上使用attr_accessor,以便更轻松
class A
attr_accessor :type
def initialize(type)
@type = type
end
end
然后你可以something = A.new(5); something.type