"0" 并不一定是 假 (false)
写习惯C/C++系代码的人应该很习惯看见类似这样的代码:
|
1
2
3
4
5
|
int i = 0;......if(i){ //这里代码不会被执行} |
因此写习惯以后会想当然地觉得其他语言里应该0在if的条件里也表示false值. 除了少数非常强类型要求if后面必须为bool的语言(C#,F#.....) 其他那些允许把其他值放在 if 的条件里的语言,应该 0 都表示false, 非0都表示true.
但事实并非如此, 什么样的值表示true,什么样的值表示false,其实跟语言的设计理念和逻辑有关, 像C这类跟硬件贴近并且非常追求性能的语言里, 用int表示布尔值更多是性能(包括编译性能)的考虑, 而如果整数表示bool,则显然应该以 0 为 false这是没什么疑问的.而由C派生的一些语言,虽然抽象层次可能更高了,以至于这个以0为false的理由不存在了,但是由于兼容性的要求, 依然会选择以0值为false, 非0值为true, 比如python.
但是,其实另外有些语言则不是这样认为, 比如大量Lisp系语言, 很多认为 "只要有值就是true, 没有任何值才是false" 也就是说只有null / none / nil / empty / missing / undefined / unknown 语义才应该是false, 其他有确定值都应该是true. 因此0也不该例外,0是true, 比如对于clojure, 只有 空值(nil) 和 false本身是false,其他任何值都是true. 而对于scheme语言, 更加严格,甚至空表和空值都算做true, 在scheme语言中, 除了一个 #f 表示 false语义, 其他的"任何"东西,都是true语义, 包括空!
所以在scheme和clojure以及很多其他lisp方言里, (if 0 1 2) 的值都是1而不是2 . (这个if表达式类似C语言的 (0 ? 1 : 2) )
lisp抽象程度极高, 语义比性能更重要得多, 因此0值作为假并没有实质意义, 根据语言不同, 假的语义也许是 空 , 也许就真的仅仅是"假" , 对语义的理解和要求不同, 因此 0 自然也并不总是 false 了.
"0" 并不一定是 假 (false)的更多相关文章
- 判断 0 和 '' 以及 empty null false的关系
if('safdasefasefasf'==0) { echo "该字符串转换为数字 等于 0 <br/>"; } //output:该字符串转换为数字 等于零. 这是 ...
- PHP empty函数判断0返回真还是假?
最近项目中,遇到一个字段是 “是否启用”值为0,1 在查询时没想就写了 if ( isset($args_array['useFlg']) && !empty($args_array[ ...
- js中‘0’到底是 true 还是 false
if ('0') alert("'0' is true"); if ('0' == false) alert("'0' is false");结果是,两次都 ...
- JS规则 较量较量(比较操作符) 两个操作数通过比较操作符进行比较,得到值为真(true)和假(false)。【>; <; >=; <=; !=;==】
较量较量(比较操作符) 我们先来做道数学题,数学考试成绩中,小明考了90分,小红考了95分,问谁考的分数高? 答: 因为"95 > 90",所以小红考试成绩高. 其中大于号& ...
- js中 null, undefined, 0,空字符串,false,不全等比较
null == undefined // true null == '' // false null == 0 // false null == false // false undefined = ...
- python全栈开发-Day13 内置函数
一.内置函数 注意:内置函数id()可以返回一个对象的身份,返回值为整数. 这个整数通常对应与该对象在内存中的位置,但这与python的具体实现有关,不应该作为对身份的定义,即不够精准,最精准的还是以 ...
- Python开发 基礎知識 3.類別&方法 (bool & str) (未完待續)
類別 可使用type()查看 內建 [ 布爾:bool (Boolen) 字串:str (String) 數字:int (Integer) 小數:float 列表:list 元祖:tuple 字典:d ...
- 函数和常用模块【day04】:内置函数(八)
一.常用内置函数 1.表格 二.内置函数详情(1-10) 1.abs(x) 功能:取数的绝对值 1 2 >>> abs(-1) #取-1的绝对值 1 2.all(iterable) ...
- Shell编程-05-Shell中条件测试与比较
目录 Shell脚本条件测试 Shell文件测试 Shell字符测试 Shell整数测试 Shell逻辑测试 Shell条件测试总结 Shell脚本条件测试 在Shell脚本中各种条件结构和流 ...
随机推荐
- MyBatis系列四 之 智能标签进行查询语句的拼接
MyBatis系列四 之 智能标签进行查询语句的拼接 使用Foreach进行多条件查询 1.1 foreach使用数组进行多条件查询 在MyBatis的映射文件中进行如下配置 <!--根据数组进 ...
- autoKeras Windows 的入门测试
在测试中分析一下ide的效果,在pycharm中测试的时候老师提示内存溢出,而且跑autoKeras的cnn时确实消耗很大空间.但是同样的电脑,换了vscode进行测试的时候没有问题.我也不知道什么回 ...
- jquery with ajax
with session storage: 1.ajax请求可以放在 $(document).ready(function (){...}); 里. 2. $.ajax({ url: "/a ...
- hdu 4506 小明系列故事——师兄帮帮忙
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4506 题目大意:找规律,判断k的t次幂前面的系数. #include <iostream> ...
- Python 本地线程
1. 本地线程,保证即使是多个线程,自己的值也是互相隔离. 2.普通对象演示 import threading import time class A(): pass a=A() def func(n ...
- VS mfc MessageBox() 使用英文显示
转载:http://blog.csdn.net/guoyk1990/article/details/44337249 由于特殊原因我们需要将 MessageBox 或 Dialog 的按钮“确定”.“ ...
- 记一次CUDA编程任务
这个月6号开始,着手解决一个具有实际意义的计算任务.任务数据有9879896条,每条包含30个整数,任务是计算每两条数据之间的斯皮尔相关系数及其P值.原始数据只有500+MB,因此我并不认为这是个多么 ...
- background-clip,origin属性
background-clip是新增属性之一,其作用是确定背景的裁剪区域. background-clip语法: background-clip:margin-box | padding-box | ...
- C++类中引用成员和常量成员的初始化(初始化列表)
如果一个类是这样定义的: Class A { public: A(int pram1, int pram2, int pram3); privite: int a; int &b; const ...
- k8s通过label来控制pod的位置
默认情况下,scheduler会将pod调度到所有可用的Node,不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node:或者 ...