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

相关文章

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

SpringBoot加载profile全面解析

《SpringBoot加载profile全面解析》SpringBoot的Profile机制通过多配置文件和注解实现环境隔离,支持开发、测试、生产等不同环境的灵活配置切换,无需修改代码,关键点包括配置文... 目录题目详细答案什么是 Profile配置 Profile使用application-{profil

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.