lua 脚本

lua 脚本是在学习 redis 时接触的,因为 redis 支持 lua 脚本,同时 Redisson 3.5 版本也是基于 lua 脚本做的分布式锁。
所以想了解一下lua脚本的基本用法。

安装环境
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make macosx test
make install
lua 基本的语法

第一次学习一个语法,肯定先是 hello world
lua 脚本是以*.lua结尾的文件
hello.lua

print("hello world")

运行

> lua hello.lua
hello world

lua 也提供了终端的交互式的方式。

还有一种方式可以将 hello.lua 定义成可执行文件

> chmod u+x hello.lua
> ./hello.lua
hello world
lua 数据类型
nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean包含两个值:false和true。
number表示双精度类型的实浮点数
string字符串由一对双引号或单引号来表示
function由 C 或 Lua 编写的函数
userdata表示任意存储在变量中的C数据结构
thread表示执行的独立线路,用于执行协同程序
tableLua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
-- 数据类型 --
print("--------------数据类型---------------")
print(type("Hello World!"))
print(type(1*0.5))
print(type(true))
print(type(nil))
print(type(print))

-- 字符串 --
print("---------------String----------------")
str = [[
    hello jay!
    hhhhhhhh...
]]
print(str)

-- table --
print("--------------table-----------------")
local tb = {}
local tb2 = {"apple","orange","banana"}

-- lua 的 table 索引是从 1 开始的
for k,v in pairs(tb2) do
    print("key",k)
end

print(tb2)
print(type(tb2))
-- .. 是字符串连接 --
a = {}
a["test"] = "helloworld"
key = 10
a[10] = 22
for k,v in pairs(a) do
    print(k .. ":" .. v)
end

-- function 函数 --
print("------------------function 函数------------------")
-- function --
function test(n)
    if n == 0 then
        return -1
    else
        return 10 /n
    end
end
print(test(5))

-- 匿名函数 --
function testFun(tab,fun)
    for k,v in pairs(tab) do
        print(fun(k))
    end
end

print(testFun(tb2,function(key)
    return (10 + key)
end
))

代码块和循环

-- 代码块? --
do
    d = 6
    local e = 1111
end
print(d)
print(e)

-- 循环1 while --
print("-----------while--------")
aa = 10
while(aa > 0) do
    print("aa 的值:",aa)
    aa = aa-1
end

-- 循环2 for --
print("-----------for-----------")
for i=1,10,1 do
    print(i)
end

-- 循环3 repeat --
a = 10
repeat
    print("a 的值:",a)
    a = a + 1
until(a>15)

本文只简单记录了一下lua的基本使用,lua还支持协同、io等功能。

Lua 是一种轻量级的脚本语言,它具有简洁、高效、易于扩展等特点。Lua 可以被嵌入到 C/C++ 应用程序中,也可以作为独立的解释器运行。下面简单介绍一下 Lua 脚本的基本语法和用法。 ## 1. 基本语法 Lua 语言的基本语法与众多编程语言类似。下面是一个简单的 Lua 脚本示例: ```lua -- 定义变量 a = 10 b = 20 -- 条件语句 if a < b then print("a is less than b") else print("a is greater than or equal to b") end -- 循环语句 for i = 1, 10 do print(i) end -- 函数定义 function add(a, b) return a + b end -- 函数调用 sum = add(a, b) print("sum =", sum) ``` ## 2. 常用函数 Lua 中内置了一些常用的函数,比如字符串处理函数、数学函数、文件操作函数等。下面是一些常用函数的示例: ```lua -- 字符串处理函数 str = "hello world" print(string.upper(str)) -- 将字符串转换为大写 print(string.sub(str, 1, 5)) -- 截取字符串 -- 数学函数 print(math.pow(2, 3)) -- 求幂 print(math.sqrt(16)) -- 求平方根 -- 文件操作函数 file = io.open("test.txt", "w") file:write("Hello World") file:close() file = io.open("test.txt", "r") print(file:read("*all")) file:close() ``` ## 3. Lua 与 C/C++ 的交互 Lua 可以被嵌入到 C/C++ 应用程序中,实现 Lua 脚本与 C/C++ 代码的交互。在 C/C++ 中,可以使用 Lua API 调用 Lua 脚本中的函数、读写变量等。下面是一个简单的示例: ```c #include "lua.hpp" int main() { lua_State* L = luaL_newstate(); luaL_openlibs(L); luaL_dofile(L, "test.lua"); // 执行 Lua 脚本 lua_getglobal(L, "add"); // 获取 Lua 函数 lua_pushnumber(L, 10); // 压入参数 lua_pushnumber(L, 20); lua_call(L, 2, 1); // 调用函数,2 表示有两个参数,1 表示有一个返回值 double result = lua_tonumber(L, -1); // 获取返回值 printf("result = %lf\n", result); lua_close(L); return 0; } ``` 上面的示例中,C/C++ 代码使用 Lua API 调用了 Lua 脚本中的 add 函数,并获取了该函数的返回值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值