Lua中使用元表(metatable)执行算术类元方法实例

上一节对元表和元方法有了一个初步的认识,这篇就来举个最简单的例子吧,加深一下印象,也为后续内容做准备。

1.元方法名

Lua其实已经规定好了各种算术操作符的元方法名字,如:

__add:加法
__sub:减法
__mul:乘法
__div:除法
__unm:相反数
__mod:取模
__pow:乘幂
 
只要在自定义元表的时候,给这些元方法名赋予新的函数就可以实现自定义操作了。

2.例子

开始举例吧,我们新建一个自定义的元表(也就是一个table变量),用来定义一些操作:

代码如下:

-- 创建一个元表
    local mt = {};
    mt.__add = function(s1, s2)
        local result = "";
        if s1.sex == "boy" and s2.sex == "girl" then
            result = "完美的家庭。";
        elseif s1.sex == "girl" and s2.sex == "girl" then
            result = "哦呵呵";
        else
            result = "蛇精病"
        end
      
        return result;
    end

其实这和上一节的例子基本一样,只是多说一次而已,使用方式如下:

代码如下:

-- 创建两个table,可以想象成是两个类的对象
    local s1 = {
        name = "Hello",
        sex = "boy",
    }; 
    local s2 = {
        name = "Good",
        sex = "girl",
    };
  
    -- 给两个table设置新的元表
    setmetatable(s1, mt);
    setmetatable(s2, mt);
  
    -- 进行加法操作
    local result = s1 + s2;
  
    print(result);

其实我们可以把s1和s2当成是类的对象,实际上Lua也可以模拟类的结构,目前暂时不说,配合看书的进度~
输出结果如下:

[LUA-print] 完美的家庭。
 
很简单吧,我们可以给“类”赋予自定义的元表,改变加法、减法等算术操作。
 
好了,这篇有点短,只是作为上一篇的补充,或者说,换一种方式叙述而已。

(0)

相关推荐

  • Lua中的元表(metatable)、元方法(metamethod)详解

    终于到了在实际中经常要用到的内容了--元表与元方法. 在第一次看见这两样东西的时候,可能会觉得它很深奥,但其实很好理解,虽然实际上它可能真的很深奥.(小若:停!滚粗.) 1.知道为什么1 + 1 = 2吗? 为什么在Lua中,1+1会等于2呢?(小若:难道除了Lua,其他地方就不等于2了?) 为什么数字和数字相加是合法的,为什么table和table相加就会报错?大家有想过这些问题吗?   没错,规则,这一切都只是规则而已,Lua规定了数字之间可以进行加减乘除,而table之间则不可以. 这是因

  • Lua中的元表与元方法学习总结

    前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了"+"符号,就可以进行类的加法运算.在Lua中也有这个道理,两个table类型的变量,你是无法直接进行"+"操作的,如果你定义了一个指定的函数,就可以进行了.那这篇博文就是主要讲的如何定义这个指定的函数,这个指定的函数是什么?希望对学习Lua的朋友有帮助. Lua是怎么做的? 通常,Lua中的每个值都有一套预定义的操作集合,比如数

  • 详解Lua中的元表概念

    元表是一个表,有助于改变它连接到一个密钥集和相关的元方法的帮助下表的行为.这些元方法是强大的lua功能,如: 更改/添加功能,以运算符表 查看metatables当钥匙不在使用__index元表中的表可用. 有迹象表明,在处理metatables其中包括使用了两种重要的方法, setmetatable(table,metatable): 这个方法是用来设置元表的一个表. getmetatable(table): 此方法用于获取表的元表. 让我们先来看看如何设置一个表作为另一个元表.它如下所示.

  • Lua中使用元表(metatable)执行算术类元方法实例

    上一节对元表和元方法有了一个初步的认识,这篇就来举个最简单的例子吧,加深一下印象,也为后续内容做准备. 1.元方法名 Lua其实已经规定好了各种算术操作符的元方法名字,如: __add:加法 __sub:减法 __mul:乘法 __div:除法 __unm:相反数 __mod:取模 __pow:乘幂   只要在自定义元表的时候,给这些元方法名赋予新的函数就可以实现自定义操作了. 2.例子 开始举例吧,我们新建一个自定义的元表(也就是一个table变量),用来定义一些操作: 复制代码 代码如下:

  • Lua元表与元方法实例讲解

    Lua中提供的元表(metatable)与元方法(metamethod)是一种非常重要的语法,metatable主要用于做一些类似于C++重载操作符式的功能. Lua中提供的元表是用于帮助lua变量完成某些非预定义功能的个性化行为,如两个table的相加,通过让两者指向同一元表并修改该元表的元方法可以实现该功能. 任何table都可以成为任何值的元表,而一组相关的table也可以共享一个元表. 一些MetaMethod: 复制代码 代码如下: __add(a, b)               

  • 网页中JS函数自动执行常用三种方法

    本文为大家分享了在网页中JS函数自动执行常用方法,供大家参考,具体内容如下 一.JS方法 1.最简单的调用方式,直接写到html的body标签里面: <body onload="myfunction()"> <html> <body onload="func1();func2();func3();"> </body> </html> 2.在JS语句调用: <script type="text

  • Android 中Popwindow弹出菜单的两种方法实例

    Android 中Popwindow弹出菜单的两种方法实例 1.popWindow就是对话框的一种方式! 此文讲解的android中对话框的一种使用方式,它叫popWindow. 2.popWindow的特性 Android的对话框有两种:PopupWindow和AlertDialog.它们的不同点在于: AlertDialog的位置固定,而PopupWindow的位置可以随意. AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的. PopupWindow的位置按照有无偏

  • Lua中的元表和元方法学习笔记

    元表(metatable)是 Lua 里每种类型的值的默认操作方式的集合,例如,数字可以加减乘除.字符串可以连接合并.table 可以插入一对 key-value 值.函数可以被调用等等,这些操作都遵循其预定义的行为来执行. 而值的默认操作方式不是一成不变的,可以通过元表来修改其行为表现,或者是新定义一些默认没有的操作.例如,当两个 table 相加时, Lua 会检查它们之间的元表里是否有 "__add" 这个函数,如果定义有这个函数, 则调用这个函数来执行一次加法操作. 这里,相加

  • Lua中的异常处理pcall、xpcall、debug使用实例

    如果需要在Lua中处理错误,必须使用函数pcall(protected call)来包装需要执行的代码. pcall接收一个函数和要传递个后者的参数,并执行,执行结果:有错误.无错误:返回值true或者或false, errorinfo 复制代码 代码如下: if pcall(function_name, -.) then -- no error else -- some error end 简单示例 复制代码 代码如下: > =pcall(function(i) print(i) end, 3

  • Spring Boot中自动执行sql脚本的方法实例

    目录 背景 实现核心 实现方法 注意 总结 说明:所有的代码基于SpringBoot 2.0.3版本 背景 在应用程序启动后,可以自动执行建库.建表等SQL脚本.下文中以要自动化执行people.sql脚本为例说明,脚本在SpringBoot工程中的路径为:classpath:people.sql,脚本的具体内容如下: CREATE TABLE IF NOT EXISTS people( persion_id BIGINT NOT NULL AUTO_INCREMENT, first_name

随机推荐