Ruby中的相等:==,===,eql?,equal?,<=>

本文详细解析了Ruby语言中等于运算符==、eql?、equal?及===的区别与用法。通过具体示例说明这些运算符如何处理对象相等性的判断,包括基本的值比较、对象身份验证以及在case语句中的特殊应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

==,===,eql?,equal? 都有些啥区别

 

 

 

  • Equality (==, eql?, equal?)

 

 

==  普通的相等,不对object_id是否相等进行检查

eql? 和 ==  是相同的, equal?则是要对object_id是否相等进行检查

 

“test” == "test"  #=> return true,因为两者的值相等

“test"equal?("test") #=> return false  因为两者的值虽然相等,但两者的object_id不相等

 

 

  • Case Equlity ===

 

当使用‘case’ statement的时候,在ruby内部,会调用===方法

 

在case statement 外部使用的时候, Tripple Equal有两种不同的情况

如果是类来调用===方法,那么,就会比较另一个对象是否为当前类的实例

如果是对象调用===方法,那么,和==用法相同

 

 

String === "test"
# returns true because "test" is an instance of String

"test" === "test"
# returns true, because both objects have the same value or "==" returns true

"test" === "different test"
# returns false, because the two objects have different values.

 

 

在Ruby on Rails中, the Range class overrides “===” method to returns true if the compared value is found in the in the range values.(更正ruby中就可以,测试过ruby1.9.3)

 

 

1..10 === 1    # returns true
1..10 === 11   # returns false

case var
   when 1..10
       "do some stuff here"
   when 11..20
       "do something else here"
   else
       "out of range"
end

 

 

Source

 

 

补充:

  • <=>

Comparison—Returns an integer (-1, 0, or +1) if this array is less than, equal to, or greater thanother_ary. Each object in each array is compared (using <=>). If any value isn’t equal, then that inequality is the return value.

返回第一个不相等的元素的比较结果

 

PL/0的词法分析程序GETSYM是一个独立的过程,其功能是为语法语义分析提供单词,把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析。其主要任务为:1、滤空格;2、识别基本字;3、识别标识符;4、拼数;5、拼复合词;6、输出源程序。 PL/0编译程序一般设置3个全程变量: SYM:存放每个单词的类别,用内部编码形式表示; ID: 存放用户所定义的标识别符的值; NUM:存放用户定义的数。 PL/0语言的单词的种类分成保留字(亦称基本字)、运算符、标识符、常数、界符5个大类,以下是针对这5类单词的一种EBNF描叙: <无符号整数>::=<数字>{<数字>} <标识符> ::=<字母>{<字母>|<数字>} <字母> ::=a|b|……|X|Y|Z <数字> ::=0|1|2|……|8|9 <保留字> ::= const | var | procedure | begin | end | odd | if | then | call | while | do | read |write <运算符> ::= + | - | * | / | = | # | < | <= | > | >= | := <界符> ::= ( | ) | , | ; | . 保留字、运算符界符这几类在实践中一般将每个单词符号设计为独立的词法单元,即每个单词符号拥有独立的类别。这样PL/0编译程序所设计的单词符号就对应到31个单词种别,这31个单词种别采用枚举类型表示。(分类请参考课本53-54页) 例:PL/0程序片段: const a=10; var b,c; procedure p; begin c:=b+a end; begin //中间片段略 studentid:201812345 name:Jenny end. name:Mike ************************************************************** 词法分析器运行结果: 1 基本字 const 2 标识符 a 3 运算符 = 4 数字 10 5 界符 ; 6 基本
最新发布
04-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值