Lua标准库
string库概念lua解释器对字符串支持有限,一个程序可以创建字符并连接字符串,但是不能截取子串,检查字符串的大小,内容等,操作字符串的功能基本来自string库
lua5.1中字符串库的所有函数如下
函数
描述
示例
结果
len
计算字符串长度
string.len(“abcd”)
4
rep
返回字符串s的n个拷贝
string.rep(“abcd”,2)
abcdabcd
lower
返回字符串全部字母大写
string.lower(“AbcD”)
abcd
upper
返回字符串全部字母小写
string.upper(“AbcD”)
ABCD
format
返回一个类似printf的格式化字符串
string.format(“the value is:%d”,4)
the value is:4
sub
返回i到n的字符串
string.sub(“abcd”,2)
bcd
string.sub(“abcd”,-2)
cd
string.sub(“abcd”,2,-2)
bc
string.sub(“abcd”,2,3) ...
Lua String函数
local str = “hellolua,helloworld”–返回索引,找不到返回nilprint(string.find(str,”hello”))–匹配返回字符串,一般用于判断字符串是否存在print(string.match(str,”hello”))– 字符串截取(str,位置(包含当前位置),长度(负数反向,-1表示截取全部))print(string.sub(str,5,-1))– 字符串替换(str,被替换字符串,替换字符串)字符串替换生成新字符串,不会改变原字符串s = string.gsub(str,”hellolua”,”lua”)print(s)– 利用字符串替换删除特定字符s1 = string.gsub(str,”hello”,””)print(s1)– 删除字符串str = nil– 字符串拼接str = string.format(“sin(3) = %.4fn”,math.sin(3))
Lua
Lua 巴西里约热内卢天主教大学 1993年 脚本语言 标准 C 语言
官网: www.lua.org
搭建环境
编译官方源码(windews 编译相对较繁琐,要有编译程序,比如 vs,windows 建议使用 LuaForWindows 安装包;linux 和 macos 相对简单,在下载的源源文件的 doc 中有编译步骤)
<p><a href="http://www.lua.org/download.html">http://www.lua.org/download.html</a></p>
下载编译好的文件直接安装(可能版本比较旧)
使用第三方的 IDE
解释器和编译器
个人理解,解释器类似于 Java 中的 java 命令,可以直接使用 java className 差不多,只不过 java 得先编译,而 Lua 不用先编译(边编译边执行),直接执行 lua fileName 。Lua 的编译器就和 Java 的编译器类一样了,都是编 ...
Lua源码阅读:基本数据类型String
Lua中对于String的实现。
Lua使用TString结构体代表一个字符串对象。
12345678910111213141516171819** Header for string value; string bytes follow the end of this structure** (aligned according to 'UTString'; see next).*/typedef struct { CommonHeader; lu_byte extra; /* reserved words for short strings; "has hash" for longs */ unsigned int hash; size_t len; /* number of characters in string */ struct *hnext; /* linked list for hash table */} TString;** Ensures that address after this type is alway ...
Lua匹配符 · 花生肉泥
字符类
说明
.
与任何字符配对
%a
与任何字母配对
%c
与任何控制符配对(例如n)
%d
与任何数字配对
%l
与任何小写字母配对
%p
与任何标点(punctuation)配对
%s
与空白字符配对
%u
与任何大写字母配对
%w
与任何字母/数字配对
%x
与任何十六进制数配对
%z
与任何代表0的字符配对
%x
与字符x配对,主要用来处理表达式中有功能的字符,例如%%与%配对
[数个字符类]
与任何[]中包含的字符配对,例如[%w_]与任何字母/数字,或下划线配对
[^数个字符类]
与任何不包含在[]中的字符类配对,例如[^%s]与任何非空白字符配对
当上述的字符类用大写书写时,表示与非此字符类的任何字符配对,例如%S表示任何非空白字符配对,%A表示非字母字符
lua支持init64
lua5.3提供了很多很好的特性例如string.pack unpack这样的好东西,同时还支持ini64.在lua之前的版本中number只有一种类型double.对于init64基本按照int来处理. 对于64位的解决方案有很多种,基本的思路都是使用8byte的string或者lightuserdata或者userdata修改元表来实现.
luajit使用userdata重载元表运算符实现在 luajit 中,是定义了一个 userdata 并重载其运算符完成的。用 ffi.cast("int64_t",0) 来构造一个 64bit 的 0 .userdata的做法存在额外开销问题,当 64bit 的 cdata 做 table 的 key 的时候,相同值的 int64 并不是同一个 key .
lightuserdata 设置 metatable实现用 lightuserdata 无损失的表示一个 int64 ,lightuserdata是一个轻量级的cdata,通过给 lightuserdata 设置 metatable ,我们可以重载它的数据运算。存在的问题: ...
Lua
Lua 字符串操作
函数
功能
string.upper(argument)
字符串全部转为大写字母
string.lower(argument)
字符串全部转为小写字母
string.gsub(mainString,findString,replaceString,num)
字符串替换
string.find (str, substr, [init, [end]])
字符串查找
string.reverse(arg)
字符串反转
string.format(…)
格式化字符串
string.char(arg)
将整型数组转成字符并连接
string.byte(arg[,int])
转换字符为整数值
string.len(arg)
计算字符串长度
string.rep(string, n)
返回字符串string的n个拷贝
..
字符串连接
字符串操作示例有字符串:
1str = "AbAbAb";
upper
123print(string.upper(str));-- ABABAB
lower
123pr ...
Lua程序设计(0)
Lua程序设计的第一篇,主要内容是基本语法以及运算符。
交互模式:在交互模式下,Lua语言解释器如果发现我们输入的某一行不完整,会等待知道程序块或表达式被输入完整后再进行解释执行。
我们可以使用-i参数让Lua语言解释器在执行完制定的程序段之后进入交互模式。
% lua -i prog
在执行完文件prog中的程序段之后进入交互模式。
另一种运行程序段的方式:dofile
我们可以同时打开两个窗口,一个窗口中使用文件编辑器编辑的代码,另一个窗口中使用交互模式运行lua语言解释器,当修改完代码并保存时,只要在Lua语言交互模式的提示符下执行dofile就可以加载新代码,然后就可以观察新代码的函数调用与执行结果了。
词法规范:
标识符是由任意字母,数字和下划线组成的字符串
下划线+大写字母的标识符通常用作特殊用途
可以将下划线+小写字母用作“哑变量”
Lua 语言对大小写敏感
单行注释:两个连续的连字符(- -);多行注释:两个连续的连字符加两对连续左方括号表示长注释或多行注释的开始,直到两个连续的右括号为止,需要重新启用代码时,在第一行行首添加一个连字符即可。
可以用分号对语句进 ...
Sol2实现Cpp和Lua绑定
<a href="/2018/06/17/cpp11_raw_string/" rel="next" title="C++11的Raw String Literals">
<i class="fa fa-chevron-left"></i>
<p class="post-nav-pre-next-title">
C++11的Raw String Literals
</p>
</a>
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev ...
Lua中的封装
Lua中没有private,table中的key/value可以随意访问,利用metatable虽然可以施加一些限制,但是实际上有各种方法可以绕过这些限制。
下面介绍一种方法,实现真正的封装。
local LuaClass = require "LuaClass"
local TestClass = LuaClass("TestClass")
local PrivateDataMap = LuaClass:PrivateDataMap{
"MemberA",
"MemberB",
}
function TestClass:GetMemberA()
return PrivateDataMap:Get(self, "MemberA")
end
function TestClass:SetMemberA(Value)
local ExistValue = PrivateDataMap:Get(self, "MemberA")
if ExistValue ...