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

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ