ruby - Ruby 实例的唯一性

标签 ruby instance

如果我分别创建两个具有相同内容的 String 实例,它们是相同的。默认情况下自定义类不是这种情况(请参见下面的示例)。

如果我有自己的类(下面的Test)并且我有一个唯一的变量(下面的@v),即。两个具有相同 @vTest 实例应该被视为相同,那么我该如何告诉 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/

相关文章:

iphone - 创建局部变量并赋值给 ivar 和直接赋值给 ivar 之间的区别?

javascript 断言未加载到我的 html.erb 页面中

ruby - 简单除法的结果随负红利变化

html - 有没有办法用 Mechanize 处理动态加载的内容?

ruby - 我无法为 Ubuntu 10 安装 sqlite3 gem

ruby-on-rails - 在 Ruby on Rails 4(欧盟立法)中强制禁用 cookie,直到用户(重新)接受 ToS

haskell - Haskell 中的矩阵构造函数和方法

c# - CaSTLe Windsor 争论不休的生活方式

java - 使用 readObject() 反序列化一个类,并将 "subsititute"调用它的实例与 readObject 返回的实例一起使用

python - 为什么 Pickle 不像文档中所说的那样调用 __new__ ?