首页
学习
活动
专区
工具
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.4K20

《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原因。 总结 使用三重等号(===),然后晚上睡个好觉。...但是('==='对于)性能提升几乎毫无意义。真正胜利是你在代码增加信心,使得额外击打键盘完全值得。

56310

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还细分为

74860

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在数组<em>的</em>解构赋值<em>中</em>, 如果右边<em>的</em>多过左边<em>的</em>, 那么如果设置默认值会被<em>覆盖</em>...(从1开始<em>的</em>) //第三:替换后<em>的</em>内容是什(<em>覆盖</em>之前<em>的</em>位置) console.log("1=================================="); arr.splice(1,2...// // slice<em>方法</em>是包头<em>不</em>包尾(包含起始位置, <em>不</em>包含结束<em>的</em>位置) console.log(qq); console.log("如何查找元素在数组位置"); let arr

80241

腾讯大佬 Python 编码规范

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

1.5K10

Ruby 字符串 Frozen 和 unfreeze 问题

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

98420

实现两数字(字符、字符串等等)时,交换时为什么要创建临时变量【学习C语言必会】

正处于C语言初阶学习朋友可能脑海里经常有一个困惑:为什么实现交换时要创建临时变量呢?直接相互赋值不可以吗?为什么要多出来这么一个步骤呢?...今天我就来为大家解答这个问题: 在C语言中,实现两个数字交换常见方法是创建一个临时变量来存储其中一个数字,然后将这两个数字互相赋值。...这是因为在不使用临时变量情况下,直接交换两个数字值会导致其中一个数字值被覆盖,从而无法正确地完成交换。...而如果我们使用临时变量,将a值存储在临时变量,然后将b值赋给a,最后将临时变量值赋给b,就可以成功地完成交换。...错误示例:  若是直接赋值,编译器会默认把等号右边值赋给等号左边,从而造成原来数值被覆盖

4810

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

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

60441

ArrayList与顺序表(1)

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

5910
领券