• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

《Effective Ruby:改善Ruby程序的48条建议》一第1条:理解Ruby中的True ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本节书摘来自华章出版社《Effective Ruby:改善Ruby程序的48条建议》一书中的第1章,第1.1节,作者[美]彼得 J.琼斯(Peter J. Jones),更多章节内容可以访问云栖社区“华章计算机”公众号查看

第1条:理解Ruby中的True

似乎每门语言处理布尔值都有其自己的方式。有些语言仅有一种真假值的表示方法。其他语言使用令人困惑的多种类型来表示,它们时真时假。当对条件表达式的真假值判断错误时会导致程序错误。比如,你知道有多少语言用零值表示假吗?零值为真的语言又有哪些呢?
Ruby有自己的做事方式,包括布尔值。幸好,区别真假值的规则非常简单。因为它不同于其他语言(这也是写这一条的原因),所以请确认你理解了以下内容。在Ruby中,除了false和nil,其他值都是真值。
我们有必要花点时间来想一想这意味着什么。这条简单的规则相比其他主流语言显得有些奇怪。在很多编程语言中,数字0表示false,而其他数字表示true。而在Ruby的规则中,数字0表示true。这也许是从其他编程语言转为Ruby程序员时会遇到的最大的陷阱。
如果你过去熟悉的编程语言假设true和false是关键字,这将是Ruby对你玩弄的另一个把戏。它们不是。事实上,true和false被描述为不遵循命名和赋值规范的全局变量。也就是说,它们并不像大多数全局变量一样以字符“$”开头,并且不可以被作为赋值语句的左半边。不过在其他方面都可以将它们视为全局变量。你看:




正如你所见的,true和false的行为都和全局对象一样,与任何对象一样,你能够调用它们之上的方法。(Ruby也定义了TRUE和FALSE这种常量,它们是对这些true和false对象的引用。)同样,它们来源于两个类:TrueClass和FalseClass。两个类中任何一种都允许你创建新的对象;你创建的对象就是true或false。如果了解Ruby条件表达式的用法,你就知道true对象的存在只是为了方便而已。因为false和nil是唯二的假值,因此用true对象表示真值是冗余的,任何非false、非nil的对象都可以表示真值。
用两个值表示假而用其他所有值表示真有时候可能造成困扰。一个常见的例子是如何区别false和nil。这在表示配置信息的对象中会贯穿始终。这些对象中,false表示应该被禁用,而nil表示选项没有显式定义,因而应使用默认值。最简单的区分方法是使用nil?方法,我会在第2条中进一步描述nil?方法。另一种方式是使用“==”操作符并将false作为左操作对象:




在某些语言中,形式化规则要求必须把不变量放在等号操作符的左边。这并不是我建议把false放在“==”操作符左边的原因。在该情况下是有功能性而非形式化原因的。将false放在左边意味着Ruby会将表达式解析为对FalseClass#==方法的调用(该方法继承自Object类)。这样我们可以很放心地知道:如果右边的操作对象也是false对象,那么返回值为true。换句话说,把false置为右操作对象是有风险的,可能不同于我们的期望,因为其他类可能覆盖Object#==方法从而改变这个比较:




当然,这样的写法太愚蠢了。不过在我的经验中,这种方式发生的可能性很大。(顺便提一下,我们将在第12条中多讲一点“==”操作符。)
要点回顾
除了false和nil外所有值都表示真值。
和很多语言不同,Ruby中的0值是真值。
如果你需要区分false和nil,可以使用nil?方法或“==”操作符并将false作为左操作对象。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ruby学习笔记发布时间:2022-07-14
下一篇:
ruby1.9.2+gem1.3.7+Rails3.0.1 windows下安装发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap