lua如何对外输出数据,相关函数有哪些

lua如何对外输出数据,相关函数有哪些,第1张

1使用接口方式,用户代入用户名和密码进入取数据

这是一个携带有有关函数或活动记录的各种信息的结构。 lu a_getstack 只会填充结构的私有部分供后面使用。 调用 lu a_getinfo 可以在 lu a_Debug 中填充那些可被使用的信息域。

下面对 lu a_Debug 的各个域做一个说明:

2source: 创建这个函数的代码块的名字。 如果 source 以 '@' 打头, 指这个函数定义在一个文件中,而 '@' 之后的部分就是文件名。 若 source 以 '=' 打头, 剩余的部分由用户行为来决定如何表示源码。 其它的情况下,这个函数定义在一个字符串中, 而 source 正是那个字符串。

short_src: 一个“可打印版本”的 source ,用于出错信息。

linedefined: 函数定义开始处的行号。

lastlinedefined: 函数定义结束处的行号。

3what: 如果函数是一个 Lu a 函数,则为一个字符串 "L ua" ; 如果是一个 C 函数,则为 "C"; 如果它是一个代码块的主体部分,则为 "main"。

currentline: 给定函数正在执行的那一行。 当提供不了行号信息的时候, currentline 被设为 -1 。

name: 给定函数的一个合理的名字。 因为 L ua 中的函数是一等公民, 所以它们没有固定的名字: 一些函数可能是全局复合变量的值, 另一些可能仅仅只是被保存在一张表的某个域中。 lua _getinfo 函数会检查函数是怎样被调用的, 以此来找到一个适合的名字。 如果它找不到名字, name 就被设置为 NULL 。

4namewhat: 用于解释 name 域。 namewhat 的值可以是 "global", "local", "method", "field", "upvalue", 或是 "" (空串)。 这取决于函数怎样被调用。 (Lu a 用空串表示其它选项都不符合。)

istailcall: 如果函数以尾调用形式调用,这个值就为真。 在这种情况下,当层的调用者不在栈中。

nups: 函数的上值个数。

nparams: 函数固定形参个数 (对于 C 函数永远是 0 )。

isvararg: 如果函数是一个可变参数函数则为真 (对于 C 函数永远为真)。

5没有内置的调试机制。 但是它提供了一组特殊的函数接口以及 钩子。 这组接口可用于构建出不同的调试器、性能剖析器、 或是其它需要从解释器获取“内部信息”的工具。

6通常,这个函数不会返回; 当协程一次次延续,将从延续函数继续运行。 然而,有一个例外: 当这个函数从一个逐行运行的钩子函数(参见) 中调用时,l ua_yieldk 不可以提供延续函数。 (也就是类似 lu a_yield 的形式), 而此时,钩子函数在调用完让出后将立刻返回。 L ua 会使协程让出,一旦协程再次被延续, 触发钩子的函数会继续正常运行。

7当一个线程处于未提供延续函数的 C 调用中,调用它会抛出一个错误。 从并非用延续方式(例如:主线程)启动的线程中调用它也会这样。

使用lua编写的程序节省性能的一些方法有:1减少内存的使用和消耗;2避免不必要的计算量;3减少函数调用和返回;4尽可能多地使用局部变量;5在函数内预先赋值;7使用缓存来提升性能。

lua文件可以用记事本程序打开,具体打开步骤如下:

1、文件格式后缀名以lua格式存在。

2、然后我们在桌面安装并双击打开查看工具。

3、然后我们打开查看工具点击文件选择打开。

4、然后我们选择lua文件点击打开。

5、然后我们打开后查看文件内容,并可以编辑。

Lua 中的 string 和 c #中相同, string 类型的值一旦改变,便要为新值开辟空间,并指向此空间。也就是说每次对 string 变量进行更改 *** 作时返回的是一个新的值,下面的函数中就不再过多去说明了。

其他还有很多这里只是简单地举几个例子。

Lua 中由于考虑大小,没有支持正则表达式。而采用了自己的模式匹配。

stringfind 函数用于在一个给定的目标字符串中搜索一个模式。最简单的是搜索单词。如果赵傲这个单词,他就会返回单词的其实索引和结束所用,如果没找到则返回 nil

如果匹配成功,就可以用 string,find 的返回值结果来调用 stringsub 来提取出目标字符串中匹配于该模式的那部分子串。

stringfind 还有一个可选的第三参数,他是一个索引,告诉函数应从目标字符串的那个位置开始搜索。

函数 stringmath 和函数 stringfind 在某种意义上很相似,它也是用一个在字符串中搜索的一种模式。不同的是, stringmath 返回的是目标字符串中模式匹配的那部分子串,而并非位置。

对于固定的模式,该函数可能没有什么意义例如 "hello" 。但当使用变量模式是,它的特性就显现出来了。

stringgusb 函数有3个参数:目标字符串、模式、替换字符串 作用就是将所有出现该模式的地方替换为替换字符串

另外还有可选的第四个参数,可以限制替换的次数

函数是 stringgsub 还有一种结果,即实际替换的次数,例如下面就是一种统计字符串中空格数量的简单方法

stringgmatch 会返回一个函数。通过这个函数可以遍历到一个字符串中所有出现指定摸式的地方。

其中模式 "%a+" 表示匹配一个或多个字母字符的序列(也就是单词),这里会遍历其中所有的单词,并存入其中。在模式中"点"具有特殊的意义,因此若要表示一个点必须写为 "%"

介意用字符分类创建更多有用的模式。字符分类就是模式中的一项。可以与一个热顶级和中的任意字符相匹配。例如分类"%d"可匹配任意数字。例如可以用

"%d%d/%d%d/%d%d%d%d" 来搜索符合 "dd/mm/yyyy" 格式的日期

下面是所有的字符分类

这些分类的大写行使表示他们的补集,例如 "%A" 表示所有非字母字符

在模式里,还有一些字符串被称为“魔法字符”他们有着特殊的含义。这些魔法字符有

{ } % + - [ ] ^ $

字符串 % 作为这些魔法字符的转义符,例如 "%" 表示匹配一个点 "%%" 表示匹配字符 "%" 不仅可以把 "%" 用于魔法字符,还可以用于其他所有非字母数字的字符。当不确定某个字符是不是需要被转义是,应该直接前置一个转义符。

对于 lua 来说,模式就是普通的字符串。并想起他字符串一样遵循相同的规则。只有模式函数才会解释它们,此时参会将 "%" 当做转义符来处理。

在一堆放括号内将不同的字符分类或者单个字符组合起来,即可创造出属于用户自己的字符分类,这种新的字符分类叫做 字符集(char-set) 。例如,字符集 ["%w_"] 表示同时匹配字母、数字和下划线。字符集 [01] 表示匹配二进制数字 字符集 [%[%]] 表示匹配方括号本身。如果需要统计一段文本中元音的数量,可以这么写

在字符集中表示一段字符范围的做法是写出自付范围的第一个字符和最后一个字符并用横线连接它们,但这种形式用的较少因为大部分常用的字符范围都已经预定义好了。如 [0-9] 即为 %d

[0-9a-fA-F] 则为 "%x" 不过如果需要查找一个8进制的数字,那么可以写 [0-7] 而不是 [01234567] 。在一个字符集前加一个 '^' 即可表示这个字符集的补集。例如 [^0-7] 表示所有非八进制数字的字符。而模式 [^\n] 则表示了除了换行符之外的其他字符。对于简单地分类,使用大写形式也可以得到他的补集, "%S" 显然比 [^%s] 简答

也可以通过修饰符来藐视模式中的重复可选部分。lua提供四种修饰符

“+” 修饰符科普配属于字符串分类的一个或多个字符。他总是获取与模式相匹配的最长序列,模式 "%a+" 表示一个或多个字母,即单词:

模式 "%d+" 匹配一个或多个数组(一个整数)

修饰符 "" 类似于 "+" ,但它还接受出现0次的情况。一种典型用途是匹配一个模式不同部分之间的空格。 比如说像匹配 () 或者 ( ) 这样的一对圆括号,可以用 "%(%s%)" 其中的 %s 可以匹配0到多个空格

另一个示例是使用模式 "[_%a][_%w]" 来匹配lua中的标识符,标识符是一个由字母或下划线开始,伴随0到多个下划线、字母或数字的序列。

修饰符 "-" 和 "" 一样,也是用于匹配0个或多个字符的。不过他会匹配最短的子串。虽然看似二者没什么差别但效果截然不同。如果使用 "[_%a][_%w]- " 来查找一个标识符时,他只会查找到第一个字母,因为 "[_%w]-" 总是匹配空串。假设要查找一个c程序中的注释,通常会首先尝试 "/%%/" 然后由于 " "会尽可能的扩展,因此程序中第一个 "/" 只会与最后一个 "/" 相匹配

但若使用 "-"话就会变成这样

修饰符""用于匹配一个可选的字符。例如要在一段文本中寻找一个整数,而这个整数可以包括一个可选的正负号。那么适用模式"[+-]%d+"就可以完成这项任任务。他可以匹配项

"-12" "23" "+1000"这样的数字,而"[+-]"是一个匹配'+'号和'-'号的字符分类,后面的''说明可这个符号是可选的。与其他系统不同的是,Lua中的修饰符只能用用于一个字符分类,无法对一组分类进行修饰。无法写出一个匹配可选打次的模式。

如果一个模式以一个'^'起始,那么他只会匹配目标字符串的开头部分。如果模式以'$'结尾,他只会匹配目标字符串的结尾部分。

在模式中,还可以用"%b",用于匹配成对的字符。他的写法是"%b<x><y>" 其中<x>和<y>是两个不同的字符串,<x>作为一个起始字符,<y>是作为一个结束字符。例如模式"%b()"可匹配以'('开始,并以')'结束的子串s

Lua 中的 string 和 c #中相同, string 类型的值一旦改变,便要为新值开辟空间,并指向此空间。也就是说每次对 string 变量进行更改 *** 作时返回的是一个新的值,下面的函数中就不再过多去说明了。

其他还有很多这里只是简单地举几个例子。

Lua 中由于考虑大小,没有支持正则表达式。而采用了自己的模式匹配。

stringfind 函数用于在一个给定的目标字符串中搜索一个模式。最简单的是搜索单词。如果赵傲这个单词,他就会返回单词的其实索引和结束所用,如果没找到则返回 nil

如果匹配成功,就可以用 string,find 的返回值结果来调用 stringsub 来提取出目标字符串中匹配于该模式的那部分子串。

stringfind 还有一个可选的第三参数,他是一个索引,告诉函数应从目标字符串的那个位置开始搜索。

函数 stringmath 和函数 stringfind 在某种意义上很相似,它也是用一个在字符串中搜索的一种模式。不同的是, stringmath 返回的是目标字符串中模式匹配的那部分子串,而并非位置。

对于固定的模式,该函数可能没有什么意义例如 "hello" 。但当使用变量模式是,它的特性就显现出来了。

stringgusb 函数有3个参数:目标字符串、模式、替换字符串 作用就是将所有出现该模式的地方替换为替换字符串

另外还有可选的第四个参数,可以限制替换的次数

函数是 stringgsub 还有一种结果,即实际替换的次数,例如下面就是一种统计字符串中空格数量的简单方法

stringgmatch 会返回一个函数。通过这个函数可以遍历到一个字符串中所有出现指定摸式的地方。

其中模式 "%a+" 表示匹配一个或多个字母字符的序列(也就是单词),这里会遍历其中所有的单词,并存入其中。在模式中"点"具有特殊的意义,因此若要表示一个点必须写为 "%"

介意用字符分类创建更多有用的模式。字符分类就是模式中的一项。可以与一个热顶级和中的任意字符相匹配。例如分类 "%d" 可匹配任意数字。例如可以用

"%d%d/%d%d/%d%d%d%d" 来搜索符合"dd/mm/yyyy"格式的日期

下面是所有的字符分类

这些分类的大写行使表示他们的补集,例如"%A"表示所有非字母字符

在模式里,还有一些字符串被称为“魔法字符”他们有着特殊的含义。这些魔法字符有

{ } % + - [ ] ^ $

字符串 % 作为这些魔法字符的转义符,例如 "%" 表示匹配一个点 "%%" 表示匹配字符 "%" 不仅可以把 "%" 用于魔法字符,还可以用于其他所有非字母数字的字符。当不确定某个字符是不是需要被转义是,应该直接前置一个转义符。

对于 lua 来说,模式就是普通的字符串。并想起他字符串一样遵循相同的规则。只有模式函数才会解释它们,此时参会将 "%" 当做转义符来处理。

在一堆放括号内将不同的字符分类或者单个字符组合起来,即可创造出属于用户自己的字符分类,这种新的字符分类叫做 字符集 (char-set) 。例如,字符集 ["%w_"] 表示同时匹配字母、数字和下划线。字符集 [01] 表示匹配二进制数字 字符集 [%[%]] 表示匹配方括号本身。如果需要统计一段文本中元音的数量,可以这么写

在字符集中表示一段字符范围的做法是写出自付范围的第一个字符和最后一个字符并用横线连接它们,但这种形式用的较少因为大部分常用的字符范围都已经预定义好了。如 [0-9] 即为 %d

[0-9a-fA-F] 则为 "%x" 不过如果需要查找一个8进制的数字,那么可以写 [0-7] 而不是 [01234567] 。在一个字符集前加一个 '^' 即可表示这个字符集的补集。例如 [^0-7] 表示所有非八进制数字的字符。而模式 [^\n] 则表示了除了换行符之外的其他字符。对于简单地分类,使用大写形式也可以得到他的补集, "%S" 显然比 [^%s] 简答

也可以通过修饰符来藐视模式中的重复可选部分。 lua 提供四种修饰符

“+” 修饰符科普配属于字符串分类的一个或多个字符。他总是获取与模式相匹配的最长序列,模式 "%a+" 表示一个或多个字母,即单词:

模式 "%d+" 匹配一个或多个数组(一个整数)

修饰符 "" 类似于 "+" ,但它还接受出现0次的情况。一种典型用途是匹配一个模式不同部分之间的空格。 比如说像匹配 () 或者 ( ) 这样的一对圆括号,可以用 "%(%s%)" 其中的 %s 可以匹配0到多个空格

另一个示例是使用模式 "[_%a][_%w]" 来匹配 lua 中的标识符,标识符是一个由字母或下划线开始,伴随0到多个下划线、字母或数字的序列。

修饰符 "-" 和 "" 一样,也是用于匹配0个或多个字符的。不过他会匹配最短的子串。虽然看似二者没什么差别但效果截然不同。如果使用 "[_%a][_%w]- " 来查找一个标识符时,他只会查找到第一个字母,因为 "[_%w]-" 总是匹配空串。假设要查找一个c程序中的注释,通常会首先尝试 "/%%/" 然后由于 "" 会尽可能的扩展,因此程序中第一个 "/" 只会与最后一个 "/" 相匹配

但若使用 "-" 话就会变成这样

修饰符 "" 用于匹配一个可选的字符。例如要在一段文本中寻找一个整数,而这个整数可以包括一个可选的正负号。那么适用模式 "[+-]%d+" 就可以完成这项任任务。他可以匹配项

"-12" "23" "+1000" 这样的数字,而 "[+-]" 是一个匹配 '+' 号和 '-' 号的字符分类,后面的 '' 说明可这个符号是可选的。与其他系统不同的是, Lua 中的修饰符只能用用于一个字符分类,无法对一组分类进行修饰。无法写出一个匹配可选打次的模式。

如果一个模式以一个 '^' 起始,那么他只会匹配目标字符串的开头部分。如果模式以 '$' 结尾,他只会匹配目标字符串的结尾部分。

在模式中,还可以用 "%b" ,用于匹配成对的 字符 。他的写法是 "%b<x><y>" 其中 <x> 和 <y> 是两个不同的字符串, <x> 作为一个起始字符, <y> 是作为一个结束字符。例如模式 "%b()" 可匹配以 '('开始,并以')' 结束的子串

s="a (enclosed (in) parenthesses) line"

print(stringgsub(s,"%d()","") -->a line

这种模式的典型用法包括 "%b()" "%b[]" "%b{}" "%b<>"

捕获功能可根据一个模式从目标字符串中抽出匹配与该模式的内容。在指定捕获时,应将模式中需要捕获的部分写到一对圆括号内。

这里括号中的值为匹配两个单词,括号外是首先匹配空格然后匹配等号继续匹配空格。并且会把表达式中用 () 括起来的值返回。

以上就是关于lua如何对外输出数据,相关函数有哪些全部的内容,包括:lua如何对外输出数据,相关函数有哪些、lua怎么写节省性能、对于*.lua文件,需要用什么软件程序打开等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9734605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存