aardio - 表中自定义元表的小于操作运算符

说明:

比较的两个对象必须指向相同的元方法(即 a@._lt === b@._lt )

两个表进行小于操作,要求其定义的元表中的 _lt 函数是同一个。

这里的同一个,是真正意义上的,指针(内存地址)一样的,而不仅仅是内容一样。

以下为错误方法:

import console; 
class ccc{
    ctor(){
        // 在类内创建类自己的元表
        // 也就是说,如果有两个类实例,则其元表是各自创建的,指针不一样的。
        this@ = {
            _add = function(b){  // +运算
                 import console;
                console.dump("++++++++++++++++++");
                return 123.456;                 
            }
             _lt = function(b) {  // <运算
                 import console;
                console.dump("<<<<<<<<<<<<<<<<<<");
                return false; 
            };
         }
    };
}
var a,b = ccc(),ccc();
console.dump(a+b);
console.dump(a<b);
console.pause(true);
import console; 
var a,b = {},{};
// 两个表各自创建元表,虽然内容一样,但本质上不是同一个表。
a@ = {
    _add = function(b){  // +运算
         import console;
        console.dump("++++++++++++++++++");
        return 123.456;                 
    }
     _lt = function(b) {  // <运算
         import console;
        console.dump("<<<<<<<<<<<<<<<<<<");
        return false; 
    };
}
b@ = {
    _add = function(b){  // +运算
         import console;
        console.dump("++++++++++++++++++");
        return 123.456;                 
    }
     _lt = function(b) {  // <运算
         import console;
        console.dump("<<<<<<<<<<<<<<<<<<");
        return false; 
    };
}
console.dump(a+b);
console.dump(a<b);
console.pause(true);

=======================================================================

以下为正确方法:

import console; 
var metatable = {
    _add = function(b){  // +运算
         import console;
        console.dump("++++++++++++++++++");
        return 123.456;                 
    }
     _lt = function(b) {  // <运算
         import console;
        console.dump("<<<<<<<<<<<<<<<<<<");
        return false; 
    };
}
class ccc{
    ctor(){
        this@ = metatable;
    };
}
var a,b = ccc(),ccc();
console.dump(a+b);
console.dump(a<b);
console.pause(true);
import console; 
var metatable = {
    _add = function(b){  // +运算
         import console;
        console.dump("++++++++++++++++++");
        return 123.456;                 
    }
     _lt = function(b) {  // <运算
         import console;
        console.dump("<<<<<<<<<<<<<<<<<<");
        return false; 
    };
}
var a,b = {},{};
a@ = metatable;
b@ = metatable;
console.dump(a+b);
console.dump(a<b);
console.pause(true);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢光庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值