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

相关文章

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取