- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 Java 和 C# 等语言中,如果要重写相等运算符,则还必须重写散列方法。
Whenever a.equals(b), then a.hashCode() must be same as b.hashCode()
据我所知,这些语言中的一些内部数据结构依赖于上述条件成立才能正常运行。
我想知道在 Ruby 中是否也是如此。重写==
操作符时是否需要重写对象的hash
方法?听说重写==
时需要重写eql?
。这些声明背后的原因是什么?如果您不覆盖这些声明,会发生什么情况?
最佳答案
不,您不需要覆盖eql?
和hash
方法。
但是,正如 tadman 提到的,您应该覆盖它们。你不知道eql如何?可能会被使用,如果您不覆盖散列,那么如果您将该对象用作散列键,您将得到奇怪的结果。看这个blog post .
说了这么多,你提出了一个有趣的观点:
In Java and C#, you must override the hash method as well.
如果不重写散列方法会怎样?它会不会编译失败,还是一种不好的做法?
感觉在Ruby中很少有像这样的硬性规定。我想知道与 C#、Java 和 C++ 等语言相比,Ruby 是否具有不同的范例。也许范式不同,因为 Ruby 是鸭子类型的,没有单独的编译过程。
关于ruby - 是否需要覆盖 hash 和 eql?在 Ruby 中覆盖 == 运算符时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38312697/
Ruby里面有4种比较方法,equal?, eql?, ==, ===,而且在不同的类里面表现的很不一样。在使用的时候也特别容易搞糊涂。 这篇博文将演示一些代码来讲解各个方法。 == - 类意义上
我正在测试 node.js 程序中的一个函数,它应该将一些数据保存到 mongo 数据库中。我正在使用 mocha、chai 和 should。 在模式中,我定义了要保存的数据 data: [{typ
当我使用 .match 和 .eql 时?对于字符串比较,他们给出了不同的结果 text_from_page = "wrong length (should be 64 characters)" er
在this presentation演讲者创建了一个值(value)类。 在实现它时,他重写了#eql?,并说在Java开发中,惯用语是每当你重写#eql?时,你必须重写#散列。 class Weig
在 RSpec 中,使用 should == ... 和 should eql(...) 有什么区别?我注意到 RSpec 文档总是使用 eql,但是 == 更少打字而且更容易阅读。我错过了什么? 最
我在 String 类的文档中读到 eql? 是一个严格的相等运算符,没有类型转换,而 == 是一个试图转换的相等运算符其次,它的参数是一个字符串,而且,这个方法的 C 源代码确认: eql?源代码:
我试图了解这四种方法之间的区别。我知道默认情况下 == 调用方法 equal? 当两个操作数引用完全相同的对象时返回 true。 === 默认也会调用 == 调用 equal?...好吧,如果这三个方
你可以做什么的例子。 (defmethod some-fn ((num real)) (print "an integer")) (defmethod some-fn ((num real))
每个人都知道,Nest Elasticsearch对要查找的东西进行澄清的查询并不容易且很无聊。我也为这个问题感到困惑。结果,我无法在查询中使用“不为空”和null。 var list = cl
前几天了解了defmethod的eql子句参数规范语法。 The defmethod hyperspec清楚地表明 eql 的存在token 是语法的基本部分。例如,当我在 CLISP 中尝试以下操作
我在 Ruby 中看到了很多平等的概念。 == eql? === equal? 而且它们都有不同的语义。对我来说应该只有两个,一个是引用相等,另一个是值相等。我不明白为什么 Ruby 需要 eql?
我有一个获取 ActiveRecord 范围的 Controller 索引测试。测试目前看起来像这样(包括一些内联调试的东西): describe "GET index" do it "assig
我想知道,根据#eql,当我将相同的键放入数组(这是哈希的键)时,为什么这个 ruby 哈希的计算结果为 nil?并检查哈希是否相等。 some_arr = [1] => [1] my_hash
Common Lisp 中是否有等于任何原子的通配符? 也就是说,有没有这样的通配符 (eql wildcard any-atom) 返回真值? 最佳答案 函数atom如果它的参数是一个原子,则返回
在编写带有大量实例变量的大类时,写==、eql?和哈希方法是一个很大的麻烦。有没有办法制作一个“模板类”来自动化这个过程?或者用任何其他方式。 例子: class Template def =
在 rspec 测试中使用 eq 和 eql 有什么区别?有区别吗: it "adds the correct information to entries" do # book = Addres
我正在处理一个 API 项目并使用 Postman 来测试 API。我写了几个测试用例来检查 null 如下, //user id is present pm.test("user id is pre
我有一个包含“搜索字段”和“搜索按钮”的页面以及一个包含 5 列的表格。我想使用 testcafe + javascript 进行自动化测试,如下所示: 1:输入“搜索字段”——完成 2:点击“搜索按
我有一个关于用于单元测试的 Chai 库的问题。我注意到一条声明说: equal : 断言目标严格 (===) 等于给定值。 eql : 断言目标深度等于值。 我对strictly 和deeply 之
我使用的是 Ruby 2.2.1,遇到以下情况: a = ... # some object h = ... # some hash p h.size #=> 1 p h.keys.first.has
我是一名优秀的程序员,十分优秀!