Lua学习笔记(三)

Lua函数

函数定义

-- []为可选部分
[local] function function_name(argument1,argument2)
    -- do something
    [return result]     -- 可以返回多个值,每个值以逗号隔开
end
-- 函数名表示该函数的引用,与C/C++的函数指针类似

可变参数

-- 与C语言类似,在函数参数列表中使用三点...表示函数有可变的参数
function add(...)
    local s=0
    for i,v in ipairs{...} do   -- 注意这里是{},{...}表示一个由所有变长参数构成的table(这里实质是一个数组)
        s=s+v
    end
    return s
end
print(add(3,4,5,6,7))       -- 输出:25

-- 可变参数也可以赋值给一个变量
function average(...)
    result=0
    local arg={...}                         -- arg为一个table,局部变量
    for i,v in ipairs(arg) do
        result=result+v
    end
    print("总共传入 " .. #arg .. " 个数")     -- #也可以用于计算table中的元素个数
    return result/#arg
end
print("平均值为",average(10,5,3,4,5,6))

-- 也可以通过select("#",...)来获取可变参数的数量
function average(...)
    result = 0
    local arg={...}
    for i,v in ipairs(arg) do
        result = result + v
    end
    print("总共传入 " .. select("#",...) .. " 个数")  -- 等价于#arg
    return result/select("#",...)
end
print("平均值为",average(10,5,3,4,5,6))

-- 也可能同时需要固定参数和可变参数
function fwrite(fmt,...)
    return io.write(string.format(fmt,...))
end

fwrite("rua\n")         -- fmt="rua",没有可变参数
fwrite("%d%d\n",1,2)    -- fmt="%d%d",可变参数为1和2

-- select函数
do  
    function foo(...)  
        for i = 1, select('#', ...) do  -- 获取参数总数
            local arg = select(i, ...); -- 读取第i个可变实参
            print("arg", arg);
        end
    end
    foo(1, 2, 3, 4);  
end

Lua运算符

Lua运算符类型

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 其他运算符

算术运算符

除了^用于计算幂,其他加、减、乘、除、取余、取反等都与C/C++相同

关系运算符

除了不等于号~=,其他等于、大于、小于、大于等于、小于等于等都与C/C++相同

逻辑运算符

-- 只有当值为nil或false才是假,其他都为真(0也为真)
and -- 类似于C/C++的&&,当为假时返回从左到右表达式第一个为假的值(nil或false),否则返回后者
or  -- 类似于C/C++的||,当为真时返回从左到右表达式第一个为真的值(非nil和非false),否则返回后者
not -- 类似于C/C++的!

其他运算符

..      -- 用于连接两个字符串或非字符串,最终返回一个字符串,注意连接一个number时需要在number与..之间加一个空格
#       -- 一元运算符,返回string或table的长度

运算符优先级

优先级运算符
1^
2not、-(负号)
3*、/
4+、-(减号)
5..
6<、>、<=、>=、~=、==
7and
8or

除了^..以外,其他所有的二元运算符都是从左向右结合

Lua字符串

字符串表示方法

'a string'      -- 单引号
"a string"      -- 双引号
[[a string]]    -- 双中括号

转义字符

与C/C++相同

字符串操作

--[[
作用:字符串全部转为大写字母
参数列表:
    argument:原字符串
返回值:转换为大写后的字符串
]]
string.upper(argument)

--[[
作用:字符串全部转为小写字母
参数列表:
    argument:原字符串
返回值:转换为小写后的字符串
]]
string.lower(argument)

--[[
作用:在字符串中替换,相当于其他语言的string.replace
参数列表:
    mainString:要替换的字符串
    findString:被替换的字符串
    replaceString:要替换成的字符串
    num:替换次数(忽略表示全部替换)
返回值:替换后的字符串和实际替换次数
]]
string.gsub(mainString,findString,replaceString,num)

--[[
作用:查找子串
参数列表:
    str:目标字符串
    substr:子串
    init:查找的起始索引
    end:查找的末尾索引
返回值:子串始末字符位置索引,不存在返回nil
]]
string.find(str,substr,[init,[end]])

--[[
作用:字符串反转
参数列表:
    arg:原字符串
返回值:反转后的字符串
]]
string.reverse(arg)

--[[
作用:返回一个类似C语言的printf的格式化字符串
参数列表:
    ...:可变参数列表
返回值:格式化字符串
]]
string.format(...)
-- 示例
string.format("the value is:%d",4)  -- 返回:the value is:4

--[[
作用:将整型数字转成字符并连接
参数列表:
    arg:ASCCI码组成的参数列表
返回值:一个由ASCCI码对应的字符连接成的字符串
]]
string.char(arg)

--[[
作用:转换字符为整数值
参数列表:
    arg:字符串
    int:指定字符串某索引位置的字符,默认为第一个字符
返回值:字符对应的ASCCI码整数值
]]
string.byte(arg,[int])

--[[
作用:计算字符串长度
参数列表:
    arg:字符串
返回值:字符串长度
]]
string.len(arg)

--[[
作用:拷贝并连接n个字符串
参数列表:
    string:字符串
    n:拷贝次数
返回值:字符串string的n个拷贝连接成的字符串
]]
string.rep(string,n)

-- 连接字符串
..

--[[
作用:查找下一个匹配的子串
参数列表:
    str:字符串
    pattern:正则匹配表达式
返回值:一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串,如果没有找到子串,返回nil
]]
string.gmatch(str,pattern)

--[[
作用:寻找原字符串str中的第一个配对
参数列表:
    str:字符串
    pattern:正则匹配表达式
    init:指定搜寻过程的起点,默认为1
返回值:配对表达式中的所有捕获结果,即匹配到的字符串
]]
string.match(str,pattern,init)

字符串格式化

除了%q,其余与C语言类似

-- %q接受一个字符串并将其转化为可安全被Lua编译器读入的格式,以下写法输出等价
string.format("%q","the\nLua")
-- 输出以下字符串,与在Lua编辑器下编写换行的字符串等价
"the\
Lua"

注意:%x%X%e%E是不同的输出,前者输出都为小写字母,后者输出统一为大写字母

string.format("%x",13)      -- 输出d
string.format("%X",13)      -- 输出D
string.format("%e",1000)    -- 输出1.000000e+03
string.format("%E",1000)    -- 输出1.000000E+03

匹配模式

https://www.runoob.com/lua/lua-strings.html

转载于:https://www.cnblogs.com/JaxesZ/p/11217003.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值