lua里转义字符介绍

更新时间:2023-07-19 04:25:58 阅读: 评论:0

LUA中标示符
Lua中的标识符(Identifiers)可以是任意的数字、字符和下划线“_”,但不能以数字开头。这条规则符合大多数编程语言中的标识符的定义。
字符的具体定义要根据系统的地区设置:任何区域设置可以认同的字母表中的字母都可以用在标识符中。
下面的关键字(keywords)为保留关键字不可以作为标识符出现:
and      break    do        el      elif
end      fal    for      function  if
in        local    nil      not      or
repeat    return    then      true      until    while
Lua对大小写敏感:and是一个保留字,但是And 和AND 是两个不一样的、但都合法的标识符。习惯上来说,以下划线开始且后面跟着大写字母的标识符(例如_VERSION) 是为Lua内部变量所保留的。
真假美猴王的真相下面的字符(串)是其他的一些标记:
+    -    *    /    ^    =
~=    <=    >=    <    >    ==
(    )    {    }    [    ]
;    :    ,    .    ..    ...
字符串(Literal strings)以单引号或者双引号定界,同时可以包含以下C语言风格的转义字符:
∙\a --- 铃声(bell)
∙\b --- 回退(backspace)
∙\f --- form feed
∙\n --- 新行(newline)
∙\r --- 回车(carriage return)
∙\t --- 水平制表符(horizontal tab)
∙\v --- 垂直制表符(vertical tab)
∙\\ --- 反斜杠(backslash)
∙\" --- 双引号(quotation mark)
∙\' --- 单引号(apostrophe)
∙\[ --- 左方括号(left square bracket)
∙\] --- 右方括号(right square bracket)
另外,一个`\newline´(一个反斜杠加上一个真正的换行符)会导致字符串内的分行。
字符串中的字符也可以使用转义字符`\ddd´通过数字值来指定。
ddd是最多为3个十进制数字的序列。
Lua中的字符串也可以包含8进制数字,包括嵌入零,它可以表示为`\0´。
字符串也可以用双方括号来定界[[ ···]]。这种括号方式的语法,字符串可以跨越多行,也可以包含嵌套的,同时不会转义任何序列。
方便起见,当开始的`[[´后面紧跟着一个换行符的话,这个换行符不会包括在字符串内。举个例子:在一个使用ASCII编码(其中`a´的编码是97,换行符是10,字符`1´是49)的系统中,以下四种格式得到的都是同一个字符串:
(1)  "alo\n123\""
(2)  '\97lo\10\04923"'
(3)  [[alo
123"]]
(4)  [[
alo
123"]]
数值常量(Numerical constants)可以有一个可选的底数部分和一个可选的指数部分。以下是有效的数值常量:
3    3.0    3.1416  314.16e-2  0.31416E1
注释(Comments)可以在任何地方出现,必须在最前面加上双减号(--)。如果紧接着-- 的文本不是[[,那么会认为是一个短注释(short comment),这一行往后到行尾都是注释。否则,会认为是一个常注释(long comment),注释直到相应的]]结束。长注释可以跨越多行,同时可以包含嵌套的[[ ··· ]] 括号对。
为了方便起见,文件的第一行如果是以#开始,这个机制允许Lua在Unix系统中用做一个脚本解释器(见6)。
有时候,我们需要一个增强版的unpack 。我们知道,lua 自带的unpack 可以把一直数组(只有连续数字下标的table)展开成一串返回值,但是对用字符串或别的东西做key 的table 无能为力。
function unpackex(tbl,args)
local ret={}
for _,v in ipairs(args) do
table.inrt(ret,tbl[v])
end
return unpack(ret)
end
孙凤武
哈尔滨师范大学研究生下面我们可以用这个函数展开一个数组,
print ( unpackex( { one=1,two=2,three=3 }, { "one","two","three" } ))
unpackex 将按第2 个参数表中给出的字符串次序解开第一个参数表。这里我们将看到输出1,2,3 。
生活就是
btw, 如果你真的需要一个高效的unpackex ,推荐用C 来实现,这样能省掉其中的临时table ret 。小巷深处
一岁宝宝拉肚子
接下来,我们在使用unpackex 时,还有可能遇到一个性能问题。因为第二个参数表通常是个常量数组,但由于lua 的语义,下列函数中的这个常量表,可能在每次进入函数foo 时构造一个新的出来。
function foo(tbl)
return unpackex(tbl,{"one","two","three"})
end
如果foo 对性能很敏感,有经验的lua 程序员或许会这样优化一下:
local const_list={"one","two","three"}
function foo(tbl)
应届生面试自我介绍return unpackex(tbl,const_list)幼儿体育活动
end
但这破坏了代码的直观。如果有了代码模版,我们实际上可以写成这样:
function foo(tbl)
return unpackex(tbl,| {"one","two","three"} |)
end

本文发布于:2023-07-19 04:25:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1087272.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字符串   数字   标识符   注释
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图