为什么两个相同的字符串在Ruby中具有相同的object_id?

weefwefwqg3

如您所知,在Ruby中,两个相同的字符串没有相同的object_id,而两个相同的符号却没有。例如:

irb(main):001:0> :george.object_id == :george.object_id
=> true
irb(main):002:0> "george".object_id == "george".object_id
=> false

但是,在下面的代码中,它显示两个具有相同值“一个”的字符串具有相同的object_id。

class MyArray < Array
    def ==(x)
        comparison = Array.new()
        x.each_with_index{|item, i| comparison.push(item.object_id.equal?(self[i].object_id))}
        if comparison.include?(false) then
            false
        else
            true
        end
    end
end
class MyHash < Hash
    def ==(x)
         y = Hash[self.sort]
        puts y.class
        puts y
        x = Hash[x.sort]
        puts x.class
        puts x
puts "______"
        xkeys = MyArray.new(x.keys)
        puts xkeys.class
        puts xkeys.to_s
        puts xkeys.object_id

        puts xkeys[0].class
        puts xkeys[0]
        puts xkeys[0].object_id
puts "______"
        xvals = MyArray.new(x.values)
puts "______"
        selfkeys = MyArray.new(y.keys)
        puts selfkeys.class
        puts selfkeys.to_s
        puts selfkeys.object_id

        puts selfkeys[0].class
        puts selfkeys[0]
        puts selfkeys[0].object_id
puts "______"
        selfvals = MyArray.new(y.values)
puts xkeys.==(selfkeys)
puts xvals.==(selfvals)
    end
end


 a1 = MyHash[{"one" => 1, "two" => 2}]
 b1 = MyHash[{"one" => 1, "two" => 2}]
 puts a1.==(b1)

并得到

Hash
{"one"=>1, "two"=>2}
Hash
{"one"=>1, "two"=>2}
______
MyArray
["one", "two"]
21638020
String
one
21641920
______
______
MyArray
["one", "two"]
21637580
String
one
21641920
______
true
true

从结果中可以看到,两个具有相同值“一个”的String对象具有相同的object_id 21641920,而应该具有不同的ID。因此,在这种情况下,谁能给我一些提示或告诉我如何获得不同的ID?最好的祝福。

Yu Hao

当将某个String对象用作a中的键时Hash,哈希将在内部复制并冻结字符串,并将该副本用作其键。

参考:Hash#store

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

比较 Ruby on Rails 中具有相同部分的两个不同字符串

来自分类Dev

python中具有相同值的两个不同的字符串对象

来自分类Dev

为什么两个相同的字符串在比较时不返回相同?

来自分类Python

为什么不同的字符串在Python中具有相同的ID?

来自分类Dev

如果它具有相同的object_id,为什么更改方法中的值不会影响Ruby中的调用者?

来自分类Dev

为什么两个具有相同 group.id 的消费者在 Kafka 中收到相同的消息

来自分类Dev

为什么两个相同但连接不同的字符串在用python调用的shell上下文中具有不同的结果?

来自分类Dev

具有相同列表的两个变量具有不同的ID .....为什么?

来自分类Dev

需要匹配具有两个相同字符的字符串

来自分类Dev

为什么两个相同的字符串不相等?

来自分类Dev

打印行在同一行中具有两个相同字符串的实例

来自分类Dev

在正则表达式中查找具有相同字符串的两个匹配项

来自分类Dev

如果两个跨度具有相同的类,如何从 bs4.BeautifulSoup 字符串中获取文本?

来自分类Dev

使用 SQL 如何从两个不同的列中只取回具有相同字符串长度的条目?

来自分类Dev

如何从字符串中提取两个具有相同前言的单词?

来自分类Dev

为什么在Python 3.6.x / 2.7.x中,两个具有相同浮点值的不同变量具有相同的id()?

来自分类Dev

为什么两个不同的字符具有相同的ASCII值?

来自分类Dev

相同字符串值中的两个 bindParam

来自分类Dev

为什么页面上的两个元素具有相同的 ID?

来自分类Dev

为什么Mysql中的两个字符串相同?

来自分类Dev

为什么从用户输入中获取的两个NSString最终具有相同的地址?

来自分类Dev

为什么具有相同属性的两个对象不能以相同的方式工作

来自分类Dev

c#int和字符串具有相同的值,但带有两个不同的数字

来自分类Dev

为什么我的两个元组包含以相同方式创建的字符串,而不相等?

来自分类Dev

为什么我在 PHP 中使用 strlen() 函数获得相同字符串的两个不同输出?

来自分类Dev

在Ruby中,为什么可变性意味着解释器不能使用同一对象来表示两个相同的字符串文字?

来自分类Dev

如何在数据框中为列查找具有相同值(字符串)的两个连续行并在它们之间添加更多行?

来自分类Dev

为什么 -5 和 256 之外的两个单独创建的不可变对象具有相同的 id?

来自分类Dev

为什么两个id变量但具有相同类类型的class_copyPropertyList()存在差异

Related 相关文章

  1. 1

    比较 Ruby on Rails 中具有相同部分的两个不同字符串

  2. 2

    python中具有相同值的两个不同的字符串对象

  3. 3

    为什么两个相同的字符串在比较时不返回相同?

  4. 4

    为什么不同的字符串在Python中具有相同的ID?

  5. 5

    如果它具有相同的object_id,为什么更改方法中的值不会影响Ruby中的调用者?

  6. 6

    为什么两个具有相同 group.id 的消费者在 Kafka 中收到相同的消息

  7. 7

    为什么两个相同但连接不同的字符串在用python调用的shell上下文中具有不同的结果?

  8. 8

    具有相同列表的两个变量具有不同的ID .....为什么?

  9. 9

    需要匹配具有两个相同字符的字符串

  10. 10

    为什么两个相同的字符串不相等?

  11. 11

    打印行在同一行中具有两个相同字符串的实例

  12. 12

    在正则表达式中查找具有相同字符串的两个匹配项

  13. 13

    如果两个跨度具有相同的类,如何从 bs4.BeautifulSoup 字符串中获取文本?

  14. 14

    使用 SQL 如何从两个不同的列中只取回具有相同字符串长度的条目?

  15. 15

    如何从字符串中提取两个具有相同前言的单词?

  16. 16

    为什么在Python 3.6.x / 2.7.x中,两个具有相同浮点值的不同变量具有相同的id()?

  17. 17

    为什么两个不同的字符具有相同的ASCII值?

  18. 18

    相同字符串值中的两个 bindParam

  19. 19

    为什么页面上的两个元素具有相同的 ID?

  20. 20

    为什么Mysql中的两个字符串相同?

  21. 21

    为什么从用户输入中获取的两个NSString最终具有相同的地址?

  22. 22

    为什么具有相同属性的两个对象不能以相同的方式工作

  23. 23

    c#int和字符串具有相同的值,但带有两个不同的数字

  24. 24

    为什么我的两个元组包含以相同方式创建的字符串,而不相等?

  25. 25

    为什么我在 PHP 中使用 strlen() 函数获得相同字符串的两个不同输出?

  26. 26

    在Ruby中,为什么可变性意味着解释器不能使用同一对象来表示两个相同的字符串文字?

  27. 27

    如何在数据框中为列查找具有相同值(字符串)的两个连续行并在它们之间添加更多行?

  28. 28

    为什么 -5 和 256 之外的两个单独创建的不可变对象具有相同的 id?

  29. 29

    为什么两个id变量但具有相同类类型的class_copyPropertyList()存在差异

热门标签

归档