首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Array不覆盖Ruby中的三重等号方法?

这个问题涉及到了Ruby编程语言中的Array类和三重等号方法(===)。在回答这个问题之前,我们先来了解一下这两个概念。

  1. Array类:Array是Ruby中的一个内置类,用于表示一个有序的元素集合。Array可以存储各种类型的数据,如整数、浮点数、字符串、对象等。Array的元素可以通过索引(下标)来访问。
  2. 三重等号方法(===):在Ruby中,三重等号方法(===)是一种比较方法,用于判断两个对象是否相等。当我们使用case语句或者在Hash中作为键时,Ruby会自动调用该方法。三重等号方法的实现是类互相独立的,因此不同类型的对象可能会有不同的实现方式。

现在回答原始问题:为什么Array不覆盖Ruby中的三重等号方法?

原因是Array类的实现中没有覆盖三重等号方法(===)。在Ruby中,Array类并没有实现自定义的三重等号方法,因此它继承了Object类中的默认实现。Object类的三重等号方法(===)默认实现是比较两个对象的对象ID是否相等。而Array类的实例之间,即使它们包含相同的元素,也有可能具有不同的对象ID,因此在默认情况下,Array的实例之间使用三重等号方法进行比较时,结果可能不符合预期。

如果您想要比较两个Array是否包含相同的元素,可以使用Array的==方法。这个方法会比较两个数组的元素是否相等,而不是比较它们的对象ID。例如:

代码语言:ruby
复制
array1 = [1, 2, 3]
array2 = [1, 2, 3]
array3 = [1, 2, 4]

puts array1 == array2 # 输出 true
puts array1 == array3 # 输出 false

总结:Array类没有覆盖Ruby中的三重等号方法,是因为默认情况下,Array的实例之间使用三重等号方法进行比较时,结果可能不符合预期。如果需要比较两个Array是否包含相同的元素,可以使用Array的==方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于 java 中的 set,get方法,而为什么不推荐直接使用public

这里引入其中的一句话: 在任何相互关系中,具有关系所涉及的各方都遵守的边界是十分重要的事情,当创建一个类库时,就建立了与客户端程序员之间的关系,他们同样也是程序员,但是他们是使用你的类库来构建应用...,或者构建更大的类库的程序员。...如果所有的类成员对任何人都是可用的,那么客户端程序员就可以对类做任何事情,而不受约束。即使你希望客户端程序员不要直接操作你的类中的某些成员,但是如果没有任何访问控制,将无法阻止此事发生。...所有的东西都将赤裸裸的暴露在世人面前。 举一个简单的例子,我这边有处理苹果的逻辑,即get,set,但是至于怎么操作,这是我这边的工作,我不想让你知道,我是怎么摘的,怎么吃得。...补充说明,set字面意思设置,get获取,我们了解一下java面向对象编程的封闭性与安全性,private 修饰的set get方法将方法封闭在了一个特定类中,其他类就无法对其变量进行方法,这样就提高了数据的安全性

1.5K20
  • 《Effective-Ruby》读书笔记

    ,如果我们具有其他编程语言的经验,那么这个过程通常只需要很短的时间; 第二个阶段是深入语言、学习语言风格,许多编程语言在解决常见的问题时都会使用独特的方法,Ruby 也不例外。...Customer 类的实例仍然可以如你所料响应 name 方法,但是为什么呢?...它为什么这么特别?在函数式编程的范畴中,它是一个可以将一个数据结构转换成另一种结构的折叠函数。...,请牢记:如果在 raise 方法中再度设置错误信息会覆盖原本在 initialize 中设置的那一条 class TemperatureError < StandardError attr_reader...测试覆盖率工具会给你一种虚假的安全感,因为被执行过的代码不代表这行代码是正确的 在编写特性的同时就加上测试,会让测试容易得多 在你开始寻找导致 bug 的根本原因之前,先写一个针对该 bug 的测试

    4K60

    我见过最好最详细的 JavaScript 关系的解释

    TLDR:强迫自己使用三重等号(===) 我无意在Reddit上找到了这个JavaScript meme,它是我见过最好的抽象。...板块1 - 引入强制 image.png 如果你在开发者控制台上运行0 == "0",为什么它返回true? 0是一个数字,然后"0"是一个字符串,它们永远不应该相同的!大多数编程语言都遵守它。...2.空数组变成空字符串 再次根据规范,JS首先寻找一个对象的toString方法来强制转换它。 在数组的情况下,toString连接其所有元素并将它们作为字符串返回。...这就是为什么得到结果为false的原因。 总结 使用三重等号(===),然后晚上睡个好觉。...但是('==='对于)性能的提升几乎毫无意义。真正的胜利是你在代码中增加的信心,使得额外的击打键盘完全值得。

    57610

    Ruby Programming | 连载 02 - Ruby 语法基础

    字符串对象的 to_i 方法可以将字符串形式的数字转换成整型 I/O 即输入(Input)和输出(Output),Ruby 中的 I/O 方法如下: 操作 栗子 说明 打印/输出到控制台 print...二、Ruby 标识符 Ruby 中的标识符类型不多,主要包含了 变量, 常量, 关键字, 方法名 等,而变量又包含了局部变量, 全局变量, 实例变量 和 类变量。...方法命名规范 Ruby 中的方法名的命名与局部变量的命名规则一致,但是 Ruby 中的一些方法名中包含了特殊字符,如 ?, !...和 = ;这些特殊符号代表着一定的含义,这也是 Ruby 语言的一种设计理念。 方法不因为方法本身受到关注,而是简单的作为提供值的表达式融入到程序中。...关键字 Ruby 中的关键字大约有 40 个,通常都是一些简单的单一词汇。常用的关键字有 def 方法定义、class 类定义、if 条件判断等。

    5.9K10

    Design Pattern: Not Just Mixin Pattern

    D类为B、C的派生类,A类有方法M,若C重写方法M,若现在通过D类的实例调用方法M,那么到底是调用A类中的方法实现,还是C类中的方法实现呢?这个就是著名的Diamond Problem。  ...这时你会发现BaseController中的成员(方法、字段)是无机集合,要靠#region......很自然地我把目光投到了jQuery.extend函数,$.extend(target/*, ...args*/)会将args的成员(方法+字段)都拷贝到target中,然后target就拥有args的特性...将Mixin原料的成员(方法+字段)复制到Mixin对象中,然后Mixin对象就拥有Mixin原料的特性。   是不是这样就将Mixin Pattern描述完整了呢?...若存在签名相同的成员,后来者覆盖前者还是保留,还是以其他规则处理都是正常的;(对象的继承链依然只有一条,因此若存在签名相同的成员,其实还是好办的^_^)   另外Mixin Pattern还细分为

    77760

    Ruby 2.5.0 稳定版发布

    Ruby 2.5 系列第一个稳定版本发布,新版包括了一系列新的特性和性能改进。...不同于 tap,此方法会返回代码块的运行结果。[功能 #6721] 支持测量分支代码覆盖和方法代码覆盖。分支代码覆盖指检查哪些分支被覆盖到,哪些没有。而方法覆盖在指可以测量方法是否被调用。...基于这些新特性运行你的测试用例,你可以精确地知道哪些分支和方法被运行,并更精确地计算测试的代码覆盖程度。...[功能 #8661] [试验性] 性能提升 通过在字节码中移除了全部 trace 指令提升了大约 5-10% 的性能。trace 指令的引入是为了提供 TracePoint的支持。...提升了多个内置方法例如 Array#concat, Enumerable#sort_by, String#concat, String#index, Time#+ 等。

    1.2K20

    JS数组(最全的数组最详解包括es6)

    数组就是用来存储一组数据的东西。 注意:数组不是基本数据类型,他是引用数据类型。 简称对象类型。 问题?为什么呢? 因为他的元素代表类一个一个对象啊。 问题? 怎么创建一个数组? 中不指定长度就是empty哈。 如果数组中指定长度的话。没有值就是undefined哈 <!...console.log("b = " + b); console.log("c = " + c); // 2.5在数组的解构赋值中, 如果右边的多过左边的, 那么如果设置默认值会被覆盖...(从1开始的) //第三:替换后的内容是什(覆盖之前的位置) console.log("1=================================="); arr.splice(1,2...// // slice方法是包头不包尾(包含起始位置, 不包含结束的位置) console.log(qq); console.log("如何查找元素在数组中的位置"); let arr

    81541

    腾讯大佬的 Python 编码规范

    (除非在行尾) 函数的参数列表中,逗号之后要有空格 函数的参数列表中,默认值等号两边不要添加空格 左括号之后,右括号之前不要加添加空格 参数列表, 索引或切片的左括号前不应加空格 文档字符串 文档字符串是包...这些字符串可以通过对象的__doc__成员被自动提取,并且被pydoc所用。文档字符串的使用三重双引号(""")。...如果文档字符串内容不能在一行内写完,首行须以句号、 问号或惊叹号结尾,接一空行,结束的三重双引号必须独占一行。 导入模块 导入总应该放在文件顶部,位于模块注释和文档字符串之后,模块全局变量和常量之前。...导入应该按照从最通用到最不通用的顺序分组,分组之间空一行: 标准库导入 第三方库导入 应用程序指定导入 应当避免使用以下的导入方法: from math import * 命名规范 模块尽量使用小写命名...小红书架构负责人:Flink在推荐系统中的应用,25页ppt 106页的《Python进阶》中文版(附下载) 19岁大学生初学Python后如何作出最受欢迎的音乐应用 看完本文有收获?

    1.5K10

    Ruby 字符串 Frozen 和 unfreeze 的问题

    为什么可以节省内存?Ruby中的String是可变对象,这一点跟Java、C#、Python都不一样。注意跟某些C++标准库中的COW的 basic_string也不一样。...Ruby中每一个String都可以就地改变。可能是因为这个原因,Ruby中两个内容相同的字符 串文本量实际上是两个不同的对象。    ...而用:ruby做为key,因为在整个运行过程中,Ruby runtime保证名为:ruby的symbol对象只有一个,所以就不用生成三个,节省内存。...在看参考手册的时候才发现 ruby 的 string  有 freeze 方法 ,却没有提供 unfreeze 。...Ruby中不只是字符串会碰到freeze的问题,Array 和 Hash 的 frozen 使用更需要注意了,可以参考下面的文章: Ruby Array and Hash frozen behavior

    1K20

    ArrayList与顺序表(1)

    ,我们不使用泛型,数组中存放 int 类型 成员方法 ❤️❤️如下是模拟顺序表的成员方法,我们通过这些成员方法来模拟顺序表的功能,我们现在来一一实现这些方法。...类型的变量,但 ArrayList 当中可以存放引用数据类型的 ⚠️⚠️⚠️当表中是引用类型时,就不可以用“等号”比较,应该用 equals 方法 5, indexOf——查找某个元素对应的位置...int 类型的变量,但 ArrayList 当中可以存放引用数据类型的 ⚠️⚠️⚠️当表中是引用类型时,就不可以用“等号”比较,应该用 equals 方法 6.get——获取 pos 位置的元素...,让后面的数据依次向前覆盖即可,对于这个删除操作,我们在图书管理器中碰见过相同的操作,其是一样的思路。...ArrayList类中的clear方法就是一个很好的例子,如下:(因为其数组存放的是引用变量) 11,display——打印顺序表 注意:顺序表中不存在该方法,我们这是为了方便看测试结果自己加的。

    7910

    Java面向对象编程三大特征 - 多态

    这样,子类实例在调用方法时就可以覆盖父类中的方法,具体的过程在后半部分阐述。 1. 重写与重载的区别 我们在刚开始接触方法的时候了解到了一个概念:重载,与重写有些类似,容易混淆。...方法重写的规则 重写的标识为@Override 方法的重写发生在子类或者接口的实现类中 被final声明的方法不能被重写 被static声明的方法不能被重写,只能声明同结构的静态方法,但是此时不构成重写...对于普通的方法,可以选择性的重写,一旦重写我们可以认为父类的方法被覆盖了,其实这样的形容是不准确的,在初学阶段可以认为是覆盖。...在这里我们重点要说明的是:等号左侧的引用部分,与等号右侧的部分在程序运行层面有怎样的关联。与基本数据类型不同,在类中可以定义各种属性和方法,使用时也需要先创建对象。...子类引用指向父类对象为什么无法使用 子类引用指向父类对象指的是:等号左侧为子类型的声明定义,等号右侧为父类型的实例。首先,结论是这种用法是不存在的,我们从两方面来分析原因。第一个方面,是否符合逻辑?

    62941
    领券