是否有一种 Ruby 方法可以根据两个对象的所有实例变量是否相等来比较它们?该方法的行为类似于此代码。
class Coordinates
attr_reader :x, :y
def initialize(x, y)
@x = x
@y = y
end
end
coordinates1 = Coordinates.new(0, 0)
coordinates2 = Coordinates.new(0, 0)
coordinates3 = Coordinates.new(1, 0)
compare(coordinates1, coordinates1) # => true
compare(coordinates1, coordinates2) # => true
compare(coordinates1, coordinates3) # => false
是否存在这种方法或类似的方法?
没有内置的方法可以实现这一点,但您可以很容易地编写一个方法。不过,我认为你问的是一个 XY 问题。
我认为这个问题应该说的是:
我应该如何定义一个方法来检查这两个Coordinates
实例是否相等?
这是我的答案:
定义一个自定义==
method:
class Coordinates
attr_reader :x, :y
def initialize(x, y)
@x = x
@y = y
end
def ==(other)
return super unless other.is_a?(Coordinates)
x == other.x && y == other.y
end
end
...但是本着 StackOverflow 的精神,这里有一些元编程来检查所有实例变量是否具有相同的名称和值:
# returns true if all objects have the same instance variable names and values
def compare(*objects)
objects.map do |object|
object.instance_variables.map do |var_name|
[var_name, object.instance_variable_get(var_name)]
end
end.uniq.count == 1
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)