如果我分别创建两个具有相同内容的 String 实例,它们是相同的。默认情况下自定义类不是这种情况(请参见下面的示例)。
如果我有自己的类(下面的Test
)并且我有一个唯一的变量(下面的@v
),即。两个具有相同 @v
的 Test
实例应该被视为相同,那么我该如何告诉 Ruby 这种情况呢?
考虑这个例子:
class Test
def initialize(v)
@v = v
end
end
a = {Test.new('a') => 1, Test.new('b') => 2}
a.delete(Test.new('a'))
p a
# # Desired output:
# => {#<Test:0x100124ef8 @v="b">=>2}
最佳答案
您需要定义一个 ==
方法来定义相等对您的类意味着什么。在这种情况下,您需要:
class Test
def initialize(v)
@v = v
end
def ==(other)
@v == other.instance_variable_get(:@v)
end
end
关于ruby - Ruby 实例的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250935/