技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 编程语言 --> 编程语言中的 true 和 false

编程语言中的 true 和 false

浏览:1921次  出处信息

我注意到 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 一下,不会花多少时间的!

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1