首页 > 其他分享 >使用setmetatable和__call元方法来实现根据字符串名字调用对应的函数

使用setmetatable和__call元方法来实现根据字符串名字调用对应的函数

时间:2024-03-04 14:11:46浏览次数:27  
标签:__ Function functions end functionName CMD call setmetatable

cc.lua

local CMD = {}
-- 定义两个函数
function CMD.func1()
    print("Function 1 called")
end

function CMD.func2()
    print("Function 2 called")
end

return CMD

 

test.lua

local functions = require "cc"

-- 设置表的元表和__call元方法
setmetatable(functions, {
    __call = function(self, functionName)
        local func = self[functionName]
        if func then
            return func()
        else
            error("Function not found: " .. functionName)
        end
    end
})

functions.func1()
-- 使用字符串名字调用对应的函数
functionName = "func2"
functions(functionName)

输出:

Function 1 called
Function 2 called

标签:__,Function,functions,end,functionName,CMD,call,setmetatable
From: https://www.cnblogs.com/barrysgy/p/18051715

相关文章

  • 27.8k star!微软开源了免费的AI课程
    GitHub上的项目"microsoft/AI-For-Beginners"是由微软发起的一个旨在教育和引导初学者学习人工智能(AI)的资源库。根据提供的链接信息,这个项目提供了一个为期12周、包含24课的课程计划,旨在让所有人能够学习AI。github地址:https://github.com/microsoft/AI-For-Beginners这个项......
  • AwesomeTechnologyWeekly 值的关注的中文社区优质技术周刊一览
    作为开发者,我们每天都需要吸收大量的信息补充我们的知识体系.AwesomeTechnologyWeeklyZh-Hans项目收集了中文技术社区各个领域的高质量的中文技术月/周/日刊,定时刷新获取最新一期中文技术月/周/日刊进行展示.访问网站开始关注吧~:https://shansan.top/awesome-tech-weekly-......
  • vue3中使用@vue-office/pdf项目中报Cannot set properties of undefined (setting 'wi
    最近项目研发的时候需要使用到pdf预览的功能,规定需要使用@vue-office/pdf插件0.2.5版本号,在使用的时候,一直无法正常运行,错误如下 但是在其他项目中却可以正常使用,想来应该是项目中的某个插件和这个有影响(不兼容)导致pdf无法预览,最终确定是vue版本的问题。正常使用的版本应该为......
  • 开发苹果iOS应用后如何提交到App Store
    摘要本文将介绍使用AppUploader工具提交iOS应用到AppStore的详细步骤。通过选择IPA文件和通道、设置专用密码以及进行上传,开发者可以顺利完成应用的提交上传过程。引言在iOS应用开发过程中,将应用上传到AppStore是至关重要的一步。本文将详细介绍如何使用AppUploader工具来提......
  • UniDateTimePicker日期转换问题---“2024-03-05” is not a date and time
    这个问题是由于操作系统的日期格式与用StrToDate给UniDateTimePicker.dateTime赋值格式不一致造成的。注意:这个问题在使用UniGui的Standalone模式下没问题,在Windowsservice模式下会出现上述问题。可以在系统的主程序中设置一下系统日期格式:procedureSetDateTimeFormat();var......
  • 【个人前端笔记】手写对象深拷贝
    一、对象深拷贝简单的方法:JSON序列化方法通过将对象转换成JSON格式并转换回对象,实现深拷贝leta1={a:"hello",b:"world",c:[1,2,3],d:{a:1,b:2}}leta2=JSON.parse(JSON.stringify(a1))console.log(a2);JSON序列化拷贝的缺点a.不支持......
  • FineReport报表系统搭建
    ***数据均为虚构***基于零售行业销售及人员数据,搭建CRM报表系统:一般报表(cpt报表):一般报表(cpt报表):员工用户信息表/客户信息表/产品信息表填报报表(cpt填报报表):员工打卡表/拜访客户表/下单明细表决策报表(frm决策报表):综合看板表/驾驶舱大屏表系统目录综合看板&驾驶舱大屏表......
  • 基础设置之——dev_open_tool
    格式:dev_open_tool(::ToolName,Row,Column,Width,Height,GenParamName,GenParamValue:ToolId)1.MainWindows类型 dev_open_tool('variable_window','default','default','default','default',[],[],Too......
  • 总结的Java知识点集合
    这是我读大学时的Java知识点总结,还不全面,后续会逐渐增加完善。知识点集合实例变量实例变量是指在类中声明的变量,其值是针对类的每个实例而独立存储的。每个类的实例都有自己的一组实例变量,它们的值可以在对象创建时初始化,并在整个对象的生命周期中保持不变或者随着对象的状态而......
  • MySQL index and dead lock
    MySQL        Analyze:step1.Thread(test1)use"selectforupdate"lockcommonageindexinrange(10,30]step 2.Thread(test2)use"selectforupdate"lockcommonageindexinrange(40,60]step 3.Thread(test2)trytoi......