Skip to content

3.4.4 - 关系操作

Lua支持以下关系操作:

  • ==:相等
  • ~=:不等
  • <:小于
  • >: 大于
  • <=:小于等于
  • >=:大于等于

这些关系操作的结果始终都是falsetrue

相等(==)首先会比较操作数的类型。如果类型不同,那么结果就是false。否则将比较操作数的值。字符串在其拥有相同的字节内容时相等。数字在其拥有相同的算术值时相等。

表、 userdata 和协程都是比较其引用:两个对象只在同时引用同一个对象的情况下相等。每当你创建一个新对象(表、 userdata 或协程),这个新对象和之前存在的所有对象都是不同的。方法总是和它自身相等。有任何可检测的差异(不同的行为或不同的定义)的方法总是不同的。不同时间创建但没有可检测差异的方法之间被归类于相等或不等都是有可能的(这取决于内部的缓存细节)。

你可以通过使用__eq元函数(参见2.4)来改变Lua表和 userdata 的比较方式。

比较是否相等时不会将字符串转换到数字,反之亦然。因此,"0"==0等于false,且t[0]和t["0"]表示在表中表示不同的字段。

不等操作(~=)与相等操作(==)相反。

顺序操作以如下流程工作:如果参数都是数字,则通过它们的算术值比较,无论它们的子类型如何。另外,如果参数都是字符串,则通过当前所设置的方式来比较。否则,Lua会尝试调用__lt或__le元函数(参见2.4)。a > b会被转化为b < a,而a >= b会被转换为b <= a,从而进行比较。

在IEEE 754标准中,特殊值NaN被认为不小于、不等于、也不大于任何值,包括它自己。