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里输出正确的中文显示。

相关推荐
Cc.Y20 分钟前
Java零基础入门:字符串深度掌握——从基础API到StringBuilder性能优化
java·开发语言·性能优化
java资料站4 小时前
十一、评估测试
开发语言·人工智能·python
左手の明天5 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
海上小飞龙5 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
朝朝辞暮i5 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
狗凯之家源码网6 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术6 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
八解毒剂6 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
小灰灰搞电子6 小时前
C语言 <ctype.h> 头文件详解
c语言·ctype.h
FakeOccupational7 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记