iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Lua中有哪些常用函数
  • 168
分享到

Lua中有哪些常用函数

2023-06-27 13:06:47 168人浏览 独家记忆
摘要

本篇内容主要讲解“lua中有哪些常用函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Lua中有哪些常用函数”吧!lua_getallocflua_Alloc lua_getallocf (lu

本篇内容主要讲解“lua中有哪些常用函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Lua中有哪些常用函数”吧!

Lua中有哪些常用函数

lua_getallocf

lua_Alloc lua_getallocf (lua_State *L, void **ud);

返回给定状态机的内存分配器函数。如果 ud 不是 NULL ,Lua 把调用lua_newstate 时传入的那个指针放入*ud


lua_getfenv

void lua_getfenv (lua_State *L, int index);

索引处值的环境表压入堆栈。


lua_getfield

void lua_getfield (lua_State *L, int index, const char *k);

t[k] 值压入堆栈,这里的 t 是指有效索引 index 指向的值。在 Lua 中,这个函数可能触发对应 “index” 事件的元方法(参见 §2.8)。


lua_getglobal

void lua_getglobal (lua_State *L, const char *name);

把全局变量 name 里的值压入堆栈。这个是用一个宏定义出来的:

#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, s)


lua_getmetatable

int lua_getmetatable (lua_State *L, int index);

把给定索引指向的值的元表压入堆栈。如果索引无效,或是这个值没有元表,函数将返回 0 并且不会向栈上压任何东西。


lua_gettable

void lua_gettable (lua_State *L, int index);

t[k] 值压入堆栈,这里的 t 是指有效索引 index 指向的值,而 k 则是栈顶放的值。

这个函数会弹出堆栈上的 key (把结果放在栈上相同位置)。在 Lua 中,这个函数可能触发对应 “index” 事件的元方法(参见§2.8)。


lua_gettop

int lua_gettop (lua_State *L);

返回栈顶元素的索引。因为索引是从 1 开始编号的,所以这个结果等于堆栈上的元素个数(因此返回 0 表示堆栈为空)。


lua_insert

void lua_insert (lua_State *L, int index);

把栈顶元素插入指定的有效索引处,并依次移动这个索引之上的元素。不要用伪索引来调用这个函数,因为伪索引不是真正指向堆栈上的位置。


lua_Integer

typedef ptrdiff_t lua_Integer;

这个类型被用于 Lua api 接收整数值。

缺省时这个被定义为 ptrdiff_t ,这个东西通常是机器能处理的最大整数类型。


lua_isboolean

int lua_isboolean (lua_State *L, int index);

当给定索引的值类型为 boolean 时,返回 1 ,否则返回 0 。


lua_iscfunction

int lua_iscfunction (lua_State *L, int index);

当给定索引的值是一个 C 函数时,返回 1 ,否则返回 0 。


lua_isfunction

int lua_isfunction (lua_State *L, int index);

当给定索引的值是一个函数( C 或 Lua 函数均可)时,返回 1 ,否则返回 0 。


lua_islightuserdata

int lua_islightuserdata (lua_State *L, int index);

当给定索引的值是一个 light userdata 时,返回 1 ,否则返回 0 。


lua_isnil

int lua_isnil (lua_State *L, int index);

当给定索引的值是 nil 时,返回 1 ,否则返回 0 。


lua_isnumber

int lua_isnumber (lua_State *L, int index);

当给定索引的值是一个数字,或是一个可转换为数字的字符串时,返回 1 ,否则返回 0 。


lua_isstring

int lua_isstring (lua_State *L, int index);

当给定索引的值是一个字符串或是一个数字(数字总能转换成字符串)时,返回 1 ,否则返回 0 。


lua_istable

int lua_istable (lua_State *L, int index);

当给定索引的值是一个 table 时,返回 1 ,否则返回 0 。


lua_isthread

int lua_isthread (lua_State *L, int index);

当给定索引的值是一个 thread 时,返回 1 ,否则返回 0 。


lua_isuserdata

int lua_isuserdata (lua_State *L, int index);

当给定索引的值是一个 userdata (无论是完整的 userdata 还是 light userdata )时,返回 1 ,否则返回 0 。


lua_lessthan

int lua_lessthan (lua_State *L, int index1, int index2);

如果索引 index1 处的值小于索引 index2 处的值时,返回 1 ;否则返回 0 。其语义遵循 Lua 中的 操作符(就是说,有可能调用元方法)。如果任何一个索引无效,也会返回 0 。


lua_load

int lua_load (lua_State *L, lua_Reader reader, void *data, const char *chunkname);

加载一个 Lua chunk 。如果没有错误, lua_load 把一个编译好的 chunk 作为一个 Lua 函数压入堆栈。否则,压入出错信息。 lua_load 的返回值可以是:

  • 0: 没有错误;
  • LUA_ERRSYNTAX: 在预编译时碰到语法错误;
  • LUA_ERRMEM: 内存分配错误。

这个函数仅仅加栽 chunk ;而不会去运行它。

lua_load 会自动检测 chunk 是文本的还是二进制的,然后做对应的加载操作(参见程序luac)。

lua_load 函数使用一个用户提供的reader 函数来读取 chunk (参见lua_Reader)。data 参数会被传入读取器函数。

chunkname 这个参数可以赋予 chunk 一个名字,这个名字被用于出错信息和调试信息(参见§3.8)。


lua_newstate

lua_State *lua_newstate (lua_Alloc f, void *ud);

创建的一个新的独立的状态机。如果创建不了(因为内存问题)返回 NULL 。参数 f 是一个分配器函数; Lua 将通过这个函数做状态机内所有的内存分配操作。第二个参数 ud ,这个指针将在每次调用分配器时被直接传入。


lua_newtable

void lua_newtable (lua_State *L);

创建一个空 table ,并将之压入堆栈。它等价于 lua_createtable(L, 0, 0)


lua_newthread

lua_State *lua_newthread (lua_State *L);

创建一个新线程,并将其压入堆栈,并返回维护这个线程的 lua_State 指针。这个函数返回的新状态机共享原有状态机中的所有对象(比如一些 table),但是它有独立的执行堆栈。

没有显式的函数可以用来关闭或销毁掉一个线程。线程跟其它 Lua 对象一样是垃圾收集的条目之一。


lua_newuserdata

void *lua_newuserdata (lua_State *L, size_t size);

这个函数分配分配一块指定大小的内存块,把内存块地址作为一个完整的 userdata 压入堆栈,并返回这个地址。

userdata 代表 Lua 中的 C 值。完整的 userdata 代表一块内存。它是一个对象(就像 table 那样的对象):你必须创建它,它有着自己的元表,而且它在被回收时,可以被监测到。一个完整的 userdata 只和它自己相等(在等于的原生作用下)。

当 Lua 通过 GC 元方法回收一个完整的 userdata 时, Lua 调用这个元方法并把 userdata 标记为已终止。等到这个 userdata 再次被收集的时候,Lua 会释放掉相关的内存。


lua_next

int lua_next (lua_State *L, int index);

从栈上弹出一个 key(键),然后把索引指定的表中 key-value(健值)对压入堆栈(指定 key 后面的下一 (next) 对)。如果表中以无更多元素,那么lua_next 将返回 0 (什么也不压入堆栈)。

典型的遍历方法是这样的:

lua_pop(L, 1); }

在遍历一张表的时候,不要直接对 key 调用 lua_tolstring ,除非你知道这个 key 一定是一个字符串。调用 lua_tolstring 有可能改变给定索引位置的值;这会对下一次调用 lua_next 造成影响。


lua_Number

typedef double lua_Number;

Lua 中数字的类型。确省是 double ,但是你可以在 luaconf.h 中修改它。

通过修改配置文件你可以改变 Lua 让它操作其它数字类型(例如:float 或是 long )。


lua_objlen

size_t lua_objlen (lua_State *L, int index);

返回指定的索引处的值的长度。对于 string ,那就是字符串的长度;对于 table ,是取长度操作符 (‘#‘) 的结果;对于 userdata ,就是为其分配的内存块的尺寸;对于其它值,为 0 。


lua_pcall

lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);

以保护模式调用一个函数。

nargsnresults 的含义与 lua_call 中的相同。如果在调用过程中没有发生错误, lua_pcall 的行为和 lua_call 完全一致。但是,如果有错误发生的话, lua_pcall 会捕获它,然后把单一的值(错误信息)压入堆栈,然后返回错误码。同 lua_call 一样, lua_pcall 总是把函数本身和它的参数从栈上移除。

如果 errfunc 是 0 ,返回在栈顶的错误信息就和原始错误信息完全一致。否则,errfunc 就被当成是错误处理函数在栈上的索引。(在当前的实现里,这个索引不能是伪索引。)在发生运行时错误时,这个函数会被调用而参数就是错误信息。错误处理函数的返回值将被lua_pcall 作为出错信息返回在堆栈上。

典型的用法中,错误处理函数被用来在出错信息上加上更多的调试信息,比如栈跟踪信息 (stack traceback) 。这些信息在lua_pcall 返回后,因为栈已经展开 (unwound) ,所以收集不到了。

lua_pcall 函数在调用成功时返回 0 ,否则返回以下(定义在lua.h 中的)错误代码中的一个:

  • LUA_ERRRUN: 运行时错误。
  • LUA_ERRMEM: 内存分配错误。 对于这种错,Lua 调用不了错误处理函数。
  • LUA_ERRERR: 在运行错误处理函数时发生的错误。

lua_pop

void lua_pop (lua_State *L, int n);

从堆栈中弹出 n 个元素。


lua_pushboolean

void lua_pushboolean (lua_State *L, int b);

b 作为一个 boolean 值压入堆栈。


lua_pushcclosure

void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);

把一个新的 C closure 压入堆栈。

当创建了一个 C 函数后,你可以给它关联一些值,这样就是在创建一个 C closure (参见 §3.4);接下来无论函数何时被调用,这些值都可以被这个函数访问到。为了将一些值关联到一个 C 函数上,首先这些值需要先被压入堆栈(如果有多个值,第一个先压)。接下来调用lua_pushcclosure 来创建出 closure 并把这个 C 函数压到堆栈上。参数n 告之函数有多少个值需要关联到函数上。lua_pushcclosure 也会把这些值从栈上弹出。


lua_pushcfunction

void lua_pushcfunction (lua_State *L, lua_CFunction f);

将一个 C 函数压入堆栈。这个函数接收一个 C 函数指针,并将一个类型为 function 的 Lua 值压入堆栈。当这个栈顶的值被调用时,将触发对应的 C 函数。

注册到 Lua 中的任何函数都必须遵循正确的协议来接收参数和返回值(参见 lua_CFunction)。

lua_pushcfunction 是作为一个宏定义出现的:

#define lua_pushcfunction(L,f) lua_pushcclosure(L,f,0)


lua_pushfstring

const char *lua_pushfstring (lua_State *L, const char *fmt, …);

把一个格式化过的字符串压入堆栈,然后返回这个字符串的指针。它和 C 函数 sprintf 比较像,不过有一些重要的区别:

  • 摸你需要为结果分配空间: 其结果是一个 Lua 字符串,由 Lua 来关心其内存分配 (同时通过垃圾收集来释放内存)。
  • 这个转换非常的受限。 不支持 flag ,宽度,或是指定精度。 它只支持下面这些: ‘%%‘ (插入一个 ‘%‘), ‘%s‘ (插入一个带零终止符的字符串,没有长度限制), ‘%f‘ (插入一个lua_Number), ‘%p‘ (插入一个指针或是一个十六进制数), ‘%d‘ (插入一个int), ‘%c‘ (把一个int 作为一个字符插入)。

到此,相信大家对“Lua中有哪些常用函数”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Lua中有哪些常用函数

本文链接: https://www.lsjlt.com/news/310790.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Lua中有哪些常用函数
    本篇内容主要讲解“Lua中有哪些常用函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Lua中有哪些常用函数”吧!lua_getallocflua_Alloc lua_getallocf (lu...
    99+
    2023-06-27
  • Lua常用函数有哪些
    这篇文章主要介绍“Lua常用函数有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Lua常用函数有哪些”文章能帮助大家解决问题。Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放...
    99+
    2023-06-27
  • EBS中常用函数有哪些
    小编给大家分享一下EBS中常用函数有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1  fnd_flex_ext.get_segs('SQL...
    99+
    2023-06-05
  • VBS中有哪些常用函数
    本篇文章为大家展示了VBS中有哪些常用函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。vbs常用函数函数名语法功能AbsAbs(number)返回一个数的绝对值SqrSqr(number)返回一个...
    99+
    2023-06-08
  • mysql中有哪些常用函数
    mysql中有哪些常用函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。控制流函数IFNULL(expr1,expr2)如果expr1不是...
    99+
    2024-04-02
  • python中常用的函数有哪些
    python中常用的函数有以下几种print()函数:打印字符串。raw_input()函数:从用户键盘捕获字符。len()函数:计算字符长度。format函数:格式化输出。type()函数:查询对象的类型。int()函数、float()函...
    99+
    2024-04-02
  • Oracle中常用的函数有哪些
    Oracle数据库中常用的函数有:1. 字符函数:UPPER、LOWER、INITCAP、SUBSTR、LENGTH、INSTR、C...
    99+
    2023-08-16
    Oracle
  • MySQL中的常用函数有哪些
    小编给大家分享一下MySQL中的常用函数有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在MySQL中,函数不仅可以出现在s...
    99+
    2024-04-02
  • oracle中有哪些常用的函数
    本篇文章为大家展示了oracle中有哪些常用的函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 DECODE 中的if-then-else逻辑在逻辑编程中,经常...
    99+
    2024-04-02
  • Python中有哪些常用的函数
    这篇文章主要讲解了“Python中有哪些常用的函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中有哪些常用的函数”吧!shutil 是 Python 中的高级文件操作模块,与o...
    99+
    2023-07-05
  • goldengate中有哪些常用的函数
    goldengate中有哪些常用的函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、Where主要用在过滤的,如以下用法:1、M...
    99+
    2024-04-02
  • PHP中的常用函数有哪些
    这篇文章主要介绍了PHP中的常用函数有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP中的常用函数有哪些文章都会有所收获,下面我们一起来看看吧。Math 函数abs — 绝对值acos — 反余弦aco...
    99+
    2023-07-05
  • Django 中有哪些常用的函数?
    Django 是一个基于 Python 的 Web 开发框架,它提供了许多强大的函数和方法来帮助开发者快速构建高质量的 Web 应用程序。在本文中,我们将探讨 Django 中常用的函数。 render() render() 是 Dja...
    99+
    2023-08-03
    编程算法 函数 django
  • MySQL中有哪些常用的函数
    MySQL中有哪些常用的函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 1、数学函数ABS(x)  &n...
    99+
    2024-04-02
  • Openv常用函数有哪些
    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,其中包含了许多常用函...
    99+
    2023-10-23
    Openv
  • MySQL常用函数有哪些
    这篇文章主要介绍MySQL常用函数有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL的函数方法,涵盖所有的MySQL常见的方法。下面是本篇文章的目录结构,可以根据自己需求...
    99+
    2024-04-02
  • Oracle常用函数有哪些
    小编给大家分享一下Oracle常用函数有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、大小写转换函数 &nbs...
    99+
    2024-04-02
  • ClickHouse常用函数有哪些
    ClickHouse是一种开源的列式存储数据库,具有高性能和可扩展性。以下是ClickHouse常用的一些函数: 聚合函数:SUM...
    99+
    2023-10-26
    ClickHouse
  • Lua标准库表处理函数有哪些
    这篇文章主要介绍“Lua标准库表处理函数有哪些”,在日常操作中,相信很多人在Lua标准库表处理函数有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Lua标准库表处理函数有...
    99+
    2024-04-02
  • VBScript常用函数有哪些
    小编给大家分享一下VBScript常用函数有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  1,GetROProperty   说明:You use the...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作