我有两个不同类的实例。这些类具有相同数量的实例变量,我需要检查不同类的这些实例是否具有特定的相等实例变量。
可以通过attr_reader
获取这些实例变量。
我找到了一种方法,但它很脏。有没有办法让它更清洁(没有元编程)?
[:attr_1, :attr2].all?{ |attr| a.public_send(attr) == b.public_send(attr)) }
答案 0 :(得分:0)
让我们说你有这个课程:
class MyClass
attr_accessor :a, :b, :c
def initialize(a, b, c)
@a, @b, @c = a, b, c
end
end
这两个例子:
foo = MyClass.new(1, 2, 3)
bar = MyClass.new(1, 2, 3)
您可以逐个比较属性:
foo.a == bar.a && foo.b == bar.b && foo.c == bar.c #=> true
或者在数组的帮助下:(数组按元素比较)
[foo.a, foo.b, foo.c] == [bar.a, bar.b, bar.c] #=> true
或者您可以extend
使用自定义模块公开您感兴趣的属性的实例:
module AttributesMethod
def attributes
{ a: a, b: b, c: c }
end
end
foo.extend(AttributesMethod)
bar.extend(AttributesMethod)
foo.attributes #=> {:a=>1, :b=>2, :c=>3}
bar.attributes #=> {:a=>1, :b=>2, :c=>3}
这允许你写:
foo.attributes == bar.attributes #=> true