Lua通过标准库实现了核心之外的功能,如math库,I/O库等。本文来分析math标准库的实现, 代码位于lmathlib.c。
math库提供了一组标准的数学函数,如绝对值函数, 三角函数,随机数函数等。调用方式为:
1 | a = math.abs(-1) |
标准库由C语言函数实现,提供给Lua程序使用。Lua程序与C函数通过虚拟栈交互。Lua将参数压入栈中,C函数从栈中获取参数,并将结果压入栈中,C函数返回入栈的结果数量。C函数无需在压入结果前清空栈,Lua会在函数执行完成后从栈中获取结果并自动清空结果下的内容。
Lua调用的C函数的格式是固定的,定义在lua.h中:
1 | typedef int (*lua_CFunction) (lua_State *L); |