六个比较操作,==、<、<=、~=、>、>=,Lua的指令只实现了前三个,后三个是对它们取反或应用交换律实现的;
同样的,比较元方法也只存在前三种;
PiL中说Lua4.0以前连<=的元方法都是对<应用交换并对结果取反实现的,即a <= b -> not (b < a),但碰到partial order的情况就不成立了;
但是在虚拟机的<=元方法的调用中却在其不存在的情况下使用了上面的转化,这应该是有问题的;
列举出各种转化方式后发现,除了这种转化,其他的都需要两次比较操作,还需要配合and或or,而且有些转化还需要另外两种比较元方法,只有<=可以不借助另一比较操作来实现第三个比较操作;
但是实现中没有调用<=元方法来处理==、<的元方法不存在的情况,可能基于性能的考虑,不想调用两次;所以,考虑性能的话,这种复用转化实现是不好的,不同的需求应用专门的实现,也不再耦合。
阅读(833) | 评论(0) | 转发(0) |