编程语言中的 true 和 false
我注意到 web.py 0.33 版本的一个问题,使用它的 Textbox 时,如果初始化给它一个值是 \"0\":
web.form.Textbox(\'foo\', value=0)
那么它 render 出来的代码是:
没有 value 属性,但显然这不是我想要的。看它的源文件 form.py 里的 render 函数的相关代码,是这样判断要不要 value 属性的:
if self.value:
attrs[\'value\'] = self.value
web.py 0.34 修复了这个问题,改成了这样(完整代码):
if self.value is not None:
attrs[\'value\'] = self.value
各种编程语言对于其它类型变量向布尔值的转换都有自己的一套规则。
C 语言中除 0 之外的所有值都相当于 true. 判断相等的语句如 if (my_var == 5) ...
假如不小心少写了一个等号,那就跟 if (5) 等价了,条件永远为真。有些 C 程序员喜欢把判断相等的语句写成 if (5 == my_var) ...
这样来避免粗心导致的错误,我个人不喜欢这种风格。
Java 强制所有的条件都使用严格的布尔类型,不用考虑整数 0 会被当作 true 还是 false. 因为写出语句 if (0) {...}
的话,编译阶段就会报错。
Ruby 中 nil 会被当作 false,整数 0 被当作 true. 空字符串如果作为条件,ruby 解释器会给出一个警告,但是它会被当作 true.
Python 中很复杂,除以下情况被认为是 false 外,均被认为是 true ( 摘自python 文档):
- None
- False
- zero of any numeric type, for example, 0, 0L, 0.0, 0j.
- any empty sequence, for example, \'\', (), [].
- any empty mapping, for example, {}.
- instances of user-defined classes, if the class defines a
__nonzero__()
or__len__()
method, when that method returns the integer zero or bool value False.
是不是很乱?0 和空字符串在 Ruby 中被当作 true 处理,但是在 Python 中它们都是 False!
还是那句话,某些闲得太无聊的大学老师喜欢拿这种题来考学生。但是我认为,不要为了记忆而记忆。假如你经常用某种语言,那么它的 true/false 你自然很了解。假如你不怎么用或者因为在多种语言中穿梭而搞乱,那就在迷惑的时候 Google 一下,不会花多少时间的!
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:qingbo.blog 来源: qingbo.blog
- 标签: false true
- 发布时间:2010-06-20 23:46:55
- [69] Twitter/微博客的学习摘要
- [65] find命令的一点注意事项
- [64] 如何拿下简短的域名
- [64] IOS安全–浅谈关于IOS加固的几种方法
- [62] Go Reflect 性能
- [62] android 开发入门
- [61] 流程管理与用户研究
- [59] Oracle MTS模式下 进程地址与会话信
- [58] 读书笔记-壹百度:百度十年千倍的29条法则
- [58] 图书馆的世界纪录