Lua中文语言编程源码-第六节,更改lmathlib.c 数学库函数, 使Lua加载中文库关键词(与数学库相关)

本文主要是介绍Lua中文语言编程源码-第六节,更改lmathlib.c 数学库函数, 使Lua加载中文库关键词(与数学库相关),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

源码已经更新在CSDN的码库里:

git clone https://gitcode.com/funsion/CLua.git
在src文件夹下的lmathlib.c 数学库 函数,Standard mathematical library:表明这个C源文件实现了Lua的标准数学库(Standard mathematical library),即提供了与数学相关的API和功能实现。
增加中文版mathlib数学函数名列表,保留英文版mathlib数学函数名列表。
原始的代码为:
static const luaL_Reg mathlib[] = {{"abs",   math_abs},{"acos",  math_acos},{"asin",  math_asin},{"atan",  math_atan},{"ceil",  math_ceil},{"cos",   math_cos},{"deg",   math_deg},{"exp",   math_exp},{"tointeger", math_toint},{"floor", math_floor},{"fmod",   math_fmod},{"ult",   math_ult},{"log",   math_log},{"max",   math_max},{"min",   math_min},{"modf",   math_modf},{"rad",   math_rad},{"sin",   math_sin},{"sqrt",  math_sqrt},{"tan",   math_tan},{"type", math_type},
#if defined(LUA_COMPAT_MATHLIB){"atan2", math_atan},{"cosh",   math_cosh},{"sinh",   math_sinh},{"tanh",   math_tanh},{"pow",   math_pow},{"frexp", math_frexp},{"ldexp", math_ldexp},{"log10", math_log10},
#endif/* placeholders */{"random", NULL},{"randomseed", NULL},{"pi", NULL},{"huge", NULL},{"maxinteger", NULL},{"mininteger", NULL},{NULL, NULL}
};
 更改成以下代码:
static const luaL_Reg mathlib[] = {{"abs", math_abs},{"绝对值", math_abs},{"acos", math_acos},{"反余弦", math_acos},{"asin", math_asin},{"反正弦", math_asin},{"atan", math_atan},{"反正切", math_atan},{"ceil", math_ceil},{"上整", math_ceil},{"cos", math_cos},{"余弦", math_cos},{"deg", math_deg},{"角度", math_deg},{"exp", math_exp},{"自然指数", math_exp},{"tointeger", math_toint},{"转整数", math_toint},{"floor", math_floor},{"下整", math_floor},{"fmod", math_fmod},{"余数", math_fmod},{"ult", math_ult},{"绝对小", math_ult},{"log", math_log},{"自然对数", math_log},{"max", math_max},{"最大值", math_max},{"min", math_min},{"最小值", math_min},{"modf", math_modf},{"余数", math_modf},{"rad", math_rad},{"弧度", math_rad},{"sin", math_sin},{"正弦", math_sin},{"sqrt", math_sqrt},{"开方", math_sqrt},{"tan", math_tan},{"正切", math_tan},{"type", math_type},{"类", math_type},
#if defined(LUA_COMPAT_MATHLIB)/** 下面的结构体定义了数学函数的映射,用于lua的数学库中。* 每个结构体成员都包含一个函数名和对应的函数指针。*/{"atan2", math_atan}, // 计算给定两个参数的反正切值{"二参反正切", math_atan},{"cosh", math_cosh}, // 计算 hyperbolic cosinus{"双曲余弦", math_cosh},{"sinh", math_sinh}, // 计算双曲正弦函数{"双曲正弦", math_sinh},{"tanh", math_tanh}, // 计算 hyperbolic tangent{"双曲正切", math_tanh},{"pow", math_pow},     // 计算一个数的另一个数次幂{"幂", math_pow},      // 和pow相同,但是使用中文名称{"frexp", math_frexp}, // 分解浮点数为一个 mantissa 和一个 exponent{"分解浮点数", math_frexp},{"ldexp", math_ldexp}, // 根据给定的 exponent 调整浮点数{"调整浮点数", math_ldexp},{"log10", math_log10}, // 计算给定数的以10为底的对数{"常用对数", math_log10},
#endif{"random", NULL},{"随机数", NULL},{"randomseed", NULL},{"随机种子", NULL},{"pi", NULL},{"π", NULL},{"huge", NULL},{"无穷", NULL},{"maxinteger", NULL},{"整大", NULL},{"mininteger", NULL},{"整小", NULL},{NULL, NULL}
};

为了保证中英文协程函数都可以加载,以便你可以复制英文原码来进行更改。所以保留了英文版协程函数名列表,这样就能使用两种文的函数。

   {"pow", math_pow},     // 计算一个数的另一个数次幂
   {"幂", math_pow},      // 和pow相同,但是使用中文名称

其实它们都是加载同样的库名,算是加载了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中文语言编程源码-第六节,更改lmathlib.c 数学库函数, 使Lua加载中文库关键词(与数学库相关)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/821789

相关文章

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.