本章介绍了以下内容。 ◎真假值 真假值是条件表达式的返回值。 ● nil 或者 false 时为假 ● 除此以外的值为真 ◎条件判断语句 条件判断语句有: ● if 语句 ● unless 语句 ● case 语句 ◎比较 用 if 语句、unless 语句做比较时,会用到比较运算符(= =,!=,<,> 等)、以 ? 结尾的 方法、逻辑运算符等。 ◎if 语句、unless 语句 两者皆为条件判断的基本语句。 ◎case 语句 在遇到像“根据对象的不同状态,采取不同的处理 ”那样的分情况处理时,我们会用到 case 语句。 分情况处理时,不同的对象所采取的判断方法也不一样。具体来说是根据 = = = 运算符的比 较特性,实现分情况处理。更详细的说明请参考专栏“= = = 与 case 语句”。 大部分的编程语言都有条件判断。本书也在很多地方使用了条件判断。大家可以参考这些内 容,逐渐熟练掌握什么时候该用哪种条件判断语句。 专栏 对象的同一性 所有的对象都有标识和值。 标识(ID)用来表示对象同一性。Ruby 中所有对象都是唯一的,对象的 ID 可以通 过 object_id (或者 _ _id_ _ )方法取得。 ary1 = [] ary2 = [] p ary1.object_id #=> 67653636 p ary2.object_id #=> 67650432 我们用 equal? 方法判断两个对象是否同一个对象(ID 是否相同)。 str1 = "foo" str2 = str1 str3 = "f" + "o" + "o" p str1.equal?(str2) #=> true p str1.equal?(str3) #=> false 对象的“值”就是对象拥有的信息。例如,只要对象的字符串内容相等,Ruby 就会认 为对象的值相等。Ruby 使用 = = 来判断对象的值是否相等。 str1 = "foo" str2 = "f" + "o" + "o" p str1 = str2 #=> true 除了 = = 以外,Ruby 还提供 eql? 方法用来判断对象的值是否相等。= = 与 eql? 都是Object 类定义的方法,大部分情况下它们的执行结果都是一样的。但也有例外,数值类会重定义 e ql? 方法,因此执行后有不一样结果。 p 1.0 = = 1 #=> true p 1.0.eql?(1) #=> false 凭直觉来讲,把 1.0 与 1 判断为相同的值会更加方便。在一般情况进行值的比较 时使用 = =,但是在一些需要进行更严谨的比较的程序中,就需要用到 eql? 方法。例如,0 与 0.0 作为散列的键时,会判断为不同的键,这是由于散列对象内部的键比较使用 了 eql? 方法来判断。 hash = { 0 => "0"} p hash[0.0] #=> nil p hash[0] #=> "0"