Lua中文语言编程源码-第七节,更改lstrlib.c 标准字符串操作与模式匹配库函数, 使Lua加载中文库关键词(标准字符串操作与模式匹配库相关)
源码已经更新在CSDN的码库里:
git clone https://gitcode.com/funsion/CLua.git
在src文件夹下的lstrlib.c 标准字符串操作与模式匹配库函数,表明这个C源文件实现了Lua的标准字符串操作与模式匹配库,即提供了与字符串操作相关的API和功能实现。
增加中文版stringmetamethods 元方法列表,保留英文版stringmetamethods元方法列表。
原始的代码为:
static const luaL_Reg stringmetamethods[] = {{"__add", arith_add},{"__sub", arith_sub},{"__mul", arith_mul},{"__mod", arith_mod},{"__pow", arith_pow},{"__div", arith_div},{"__idiv", arith_idiv},{"__unm", arith_unm},{"__index", NULL}, /* placeholder */{NULL, NULL}
};
更改成以下代码:
/* 定义字符串的元方法列表 */
static const luaL_Reg stringmetamethods[] = {{"__add", arith_add},{"__加",arith_add},{"__sub", arith_sub},{"__减",arith_sub},{"__mul", arith_mul},{"__乘",arith_mul},{"__mod", arith_mod},{"__取模",arith_mod},{"__pow", arith_pow},{"__乘方",arith_pow},{"__div", arith_div},{"__整除",arith_div},{"__idiv", arith_idiv},{"__向下整除", arith_idiv},{"__unm", arith_unm},{"__负号", NULL},{"__index", NULL}, {"__索引", NULL} ,/* 占位符 */{NULL, NULL}
};
原始的代码为:
static const luaL_Reg strlib[] = {{"byte", str_byte},{"char", str_char},{"dump", str_dump},{"find", str_find},{"format", str_format},{"gmatch", gmatch},{"gsub", str_gsub},{"len", str_len},{"lower", str_lower},{"match", str_match},{"rep", str_rep},{"reverse", str_reverse},{"sub", str_sub},{"upper", str_upper},{"pack", str_pack},{"packsize", str_packsize},{"unpack", str_unpack},{NULL, NULL}
};
更改成以下代码:
/* strlib 结构体定义了字符串库中所有函数的映射关系 */
static const luaL_Reg strlib[] = {{"byte", str_byte}, /* byte函数用于提取字符串中的一个或多个字节 */{"char", str_char}, /* char函数根据给定的数值创建一个字符串 */{"dump", str_dump}, /* dump函数将函数转换为二进制字符串 */{"find", str_find}, /* find函数在字符串中查找子字符串 */{"format", str_format}, /* format函数根据指定的格式创建一个字符串 */{"gmatch", gmatch}, /* gmatch函数返回一个迭代器,用于在字符串中进行全局正则表达式匹配 */{"gsub", str_gsub}, /* gsub函数在字符串中替换所有匹配的子串 */{"len", str_len}, /* len函数返回字符串的长度 */{"lower", str_lower}, /* lower函数将字符串中的大写字母转换为小写字母 */{"match", str_match}, /* match函数在字符串中进行模式匹配 */{"rep", str_rep}, /* rep函数重复字符串一定次数 */{"reverse", str_reverse}, /* reverse函数反转字符串 */{"sub", str_sub}, /* sub函数提取字符串的子串 */{"upper", str_upper}, /* upper函数将字符串中的小写字母转换为大写字母 */{"pack", str_pack}, /* pack函数将数据打包成二进制格式 */{"packsize", str_packsize}, /* packsize函数返回给定格式数据打包后的大小 */{"unpack", str_unpack}, /* unpack函数从二进制字符串中解包数据 */
/* 中文注释部分为对应的中文函数名,便于中文用户理解 */{"字节", str_byte},{"字符", str_char},{"转储", str_dump},{"查找", str_find},{"格式", str_format},{"匹配", gmatch},{"替换", str_gsub},{"长度", str_len},{"小写", str_lower},{"配对", str_match},{"重复", str_rep},{"倒序", str_reverse},{"子串", str_sub},{"大写", str_upper},{"打包", str_pack},{"包尺寸", str_packsize},{"拆包", str_unpack},{NULL, NULL} /* 结束标志 */
};
为了保证中英文 函数都可以加载,以便你可以复制英文原码来进行更改。所以保留了英文版 函数名列表,这样就能使用两种文的函数。
{"byte", str_byte}, // 字节
{"字节", str_byte}, // 和byte相同,但是使用中文名称
其实它们都是加载同样的库名,算是加载了2次,以Lua内部算法,应该只会加载一次。
更改完之后,同样需要重新编译Lua的源码,实现以上列出的关键词的中文化。
注意,在Window系统下编译Lua, 最好将所有Lua的源码,重新保存成ANSI格式的文件,刚下载的默认的源码会是UTF-8格式的。
这个事情说三遍,
1,不然就会出现,Window下的UTF-8源码可编译,但Shell里的中文输出会乱码。
2,要不然就是Window的ANSI源码不可编译(假如你没做以上步骤),
3,如果是用ANSI格式的源码编译的Lua.exe,对应的,你在Window下写的Lua程序也是需要保存成ANSI格式的。这样就可以在Shell里输出正确的中文显示。
相关文章:
Lua中文语言编程源码-第七节,更改lstrlib.c 标准字符串操作与模式匹配库函数, 使Lua加载中文库关键词(标准字符串操作与模式匹配库相关)
源码已经更新在CSDN的码库里: git clone https://gitcode.com/funsion/CLua.git在src文件夹下的lstrlib.c 标准字符串操作与模式匹配库函数,表明这个C源文件实现了Lua的标准字符串操作与模式匹配库,即提供了与字符串操作相关的API和功能实现…...
EtherCAT开源主站 IGH 介绍及主站伺服控制过程
目录 前言 IGH EtherCAT主站介绍 主要特点和功能 使用场景 SOEM 主站介绍 SOEM 的特点和功能 SOEM 的使用场景 IGH 主站 和 SOEM对比 1. 功能和复杂性 2. 资源消耗和移植性 3. 使用场景 EtherCAT 通信原理 EtherCAT主站控制伺服过程 位置规划模式 原点复归模式…...
自然语言:python实现自然语言处理中计算文件中的英语字母的熵
下面是一个示例代码,实现了计算文件中英语字母的熵的功能。 import mathdef calculate_entropy(text):# 统计字母的出现次数letter_count {}total_count 0for char in text:if char.isalpha():char char.lower()letter_count[char] letter_count.get(char, 0) …...
分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别
分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别 目录 分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别。 2.自…...
基于SpringBoot的后勤管理系统【附源码】
后勤管理系统开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myecli…...
智能仓储系统|基于JSP技术+ Mysql+Java+ Tomcat的智能仓储系统设计与实现(可运行源码+数据库+设计文档)
推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…...
Layui实现删除及修改后停留在当前页
1、功能概述? 我们在使用layui框架的table显示数据的时候,会经常的使用分页技术,这个我们期望能够期望修改数据能停留在当前页,或者删除数据的时候也能够停留在当前页,这样的用户体验会更好一些,但往往事与…...
小型研发型企业,如何筛选合适的内外网数据交换方案?
研发型企业是社会经济发展的重要组成,研发型企业是一种以研发创新为主要驱动力的企业。这些企业主要注重技术创新和产品研发,致力于将新的科技成果转化为市场竞争力。它们通常拥有强大的研发团队和研发设施,投入大量资源用于技术研究和产品开…...
Visual Studio 常用快捷键
执行调试: F5 调试 F5: 启动调试 ShiftF5: 停止调试 CtrlShiftF5: 重启调试 执行(调试) CtrlF5: 开始执行(不调试) F10: 逐过程 F11: 逐语句 断点 F9: 启用/关闭断点 CtrlF9: 停止断点 CtrlShiftF9: 删除全部断点 格式化代码 Ctrl kd …...
【WEEK3】 【DAY4】JSON Interaction Handling Part Three【English Version】
2024.3.14 Thursday Following the previous article 【WEEK3】 【DAY3】JSON Interaction Handling Part Two【English Version】 Contents 6.7. Writing Abstract Classes6.7.1. Reason6.7.2. Create JsonUtils.java6.7.3. Add a method json6 in UserController to verify…...
蓝桥杯物联网竞赛_STM32L071_12_按键中断与串口中断
按键中断: 将按键配置成GPIO_EXTI中断即外部中断 模式有三种上升沿,下降沿,上升沿和下降沿都会中断 external -> 外部的 interrupt -> 打断 trigger -> 触发 detection -> 探测 NVIC中将中断线ENABLE 找接口函数 在接口函数中写…...
Java安全 反序列化(1) URLDNS链原理分析
Java安全 反序列化(1) URLDNS链原理分析 文章目录 Java安全 反序列化(1) URLDNS链原理分析前置知识应用分析payload1.新建HashMap类2.新建URL类3.获取URL 的 Class对象4.通过反射访问URL内部变量5.通过反射为URL中类赋值6.调用HashMap#put方法传入key和value7.再次通过反射为UR…...
电脑插上网线之后仍然没网络怎么办?
前言 有小伙伴在使用Windows系统的时候,经常会遇到电脑没网络,但又不知道具体怎么调整才好。 本篇内容适合插网线和使用Wi-Fi的小伙伴,文章本质上是重置电脑的网络设置。 注意事项:网络重置操作会让已连接过的wifi密码丢失&…...
easyexcel读和写excel
请直接看原文: JAVA使用easyexcel操作Excel-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 之前写过一篇《JAVA操作Excel》,介绍了jxl和poi读写Excel的实现&am…...
路由器级联
目录 一、实现功能二、实现步骤2.1 接线步骤 三、效果3.1 常规连接3.2 路由器级联 一、实现功能 主路由器:可有WiFi功能,LAN口下接各设备,并接一个辅路由器辅路由器:开启WiFi功能,有线或无线下接各设备功能࿱…...
CentOS7使用Docker部署.net Webapi
1 准备WebApi项目 对于已存在的WebApi项目,需要添加Docker支持; 编码时,先设置好项目需要的端口号:program.cs中,app.Run("http://*:8000");设置端口为:8000在VS中,选中项目…...
Windows程序员用MAC:初始设置(用起来像win一些)
初级代码游戏的专栏介绍与文章目录-CSDN博客 初用Mac会有很多不习惯,特别是鼠标滚轮的滚动方向和windows是反的,还好是通过设置改变的。下面是我自己的设置。 目录 一、显示器设置 二、屏保、时钟、触发角 三、程序坞与菜单栏 四、安全性与隐私 五…...
基于深度学习YOLOv8+Pyqt5的工地安全帽头盔佩戴检测识别系统(源码+跑通说明文件)
wx供重浩:创享日记 对话框发送:318安全帽 获取完整源码源文件7000张已标注的数据集训练好的模型配置说明文件 可有偿59yuan一对一远程操作配置环境跑通程序 效果展示(图片检测批量检测视频检测摄像头检测) 基于深度学习YOLOv8Pyqt…...
csv编辑器是干什么的?
csv编辑器是一种用于编写、编辑和管理文本文件的工具。适用于 JetBrains IDE 系列的 CSV 编辑器插件,此插件将 CSV(逗号分隔值)作为一种语言引入 Jetbrains IDE,其中包含语法定义、结构化语言元素和关联的文件类型 (.c…...
计算机网络——物理层(奈氏准则和香农定理)
计算机网络——物理层(奈氏准则和香农定理) 失真码间串扰奈氏准则(奈奎斯特定理)极限数据率 噪声信噪比香农定理奈氏准则和香农定理的区别 前面我们已经了解一些数据通信的基本知识,没有看过上一篇得小伙伴可以点击这里…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
