当前位置:网站首页 > Lua脚本开发 > 正文

Lua脚本编程基础

一. 数据类型

①基本类型

1. nil类型

2. boolean类型

3. numbers类型

4. string类型

②高级类型

1. table类型

2. function类型

3. userdata类型

4. thread类型

 二 . 脚本示例

-- main.lua
print("hello lua")
-- lua的四种基本数据类型:nil,boolean,numbers,string
-- 全局变量,可以直接在其他脚本文件中访问。慎用
-- 该变量为数字类型,数字类型是以double类型存储的
print("initialize g_var="..g_var)
g_var = 10
dofile("test.lua")
-- 局部变量,离开作用域会自动释放
--  该变量为nil类型
-- 将全局变量设为nil,则该变量将会被lua回收。因此申请了全局变量,在不用的时候
-- 需要设为nil,进行资源释放
local b=nil
print(type(b))

-- bool类型变量
local c = true
print(type(c))


-- 字符串类型
local html = [[<html>
<body>hello html</body>
</html>]]
print(type(html))
-- ..用于字符串拼接
html = "<header info>" .. html .. "</header info>"

print(html)
print("html length=" .. string.len(html))
print("sub string = ".. string.sub(html,1,5))
-- 字符串查找,支持正则匹配
local bb,ee = string.find(html,"body");
print("find string = ".. string.sub(html,bb,ee))
-- 字符串替换,支持正则匹配
local re = string.gsub(html,"body","Body")
print("replace result ="..re)


-- lua 的高级数据类型

local tab1 = {"001","002","003"}
tab2 = {id=123,age=20,name="Tom"};
tab2["country"] = "china"
print("======= Table1=======")
for i,v in ipairs(tab1) do
    print("key="..i..", value="..v)
end
print("======= insert to certain position =======")
table.insert(tab1,3,"002-2")
for i,v in ipairs(tab1) do
    print("key="..i..", value="..v)
end

print("======= remove certain element =======")
table.remove(tab1,3)
for i,v in ipairs(tab1) do
    print("key="..i..", value="..v)
end
print("======= Table2=======")
for i,v in pairs(tab2) do
    print("key="..i..", value="..v)
end

tab2["id"]=nil
print("======= remove certain element =======")
for i,v in pairs(tab2) do
    print("key="..i..", value="..v)
end
-- test.lua print(g_var) local b = tonumber("1000") print(b*g_var)
-- functions.lua function callback(info,param) print("in callback function:"..info) print("key="..param.key1) return {status=true,msg=info} -- return true,info end function test(...) local argCnt=table.getn(arg) print("arg count is "..argCnt) for i=1,argCnt do print("arg"..i.."="..type(arg[i])) if(type(arg[i]) == "function") then arg[i]("test function",{key1="p1",key2="p2"}) end end end local lambdalua=function(para1,para2) print("para1="..para1..",para2="..para2) end -- test(123,"hello",callback) -- lambdalua("hello","lua")

三. lua与c/c++的互操作

// CppLua.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include<thread> extern "C" { #include <lua.h> #include <lauxlib.h> #include <lualib.h> } int main() { std::cout << "lua begin" << std::endl; lua_State* L = lua_open(); luaopen_base(L); luaopen_string(L); luaopen_table(L); if (luaL_loadfile(L, "functions.lua") != 0) { const char* error = lua_tostring(L,-1); printf("lua load error: %s",error); return -1; } //在脚本运行前,设一些初始值给lua脚本 lua_pushinteger(L, 100); lua_setglobal(L,"g_var");//会自行pop栈顶元素 lua_pcall(L,0,0,0); // std::this_thread::sleep_for(std::chrono::milliseconds(1000)); lua_getglobal(L,"g_var");//会向栈顶压栈g_var的值 int gv = lua_tonumber(L,-1); lua_pop(L, 1);//出栈一个元素,恢复栈 printf("lua global varable=%d\n",gv); //lua_getglobal(L,"tab2"); //lua_getfield(L,-1,"age"); //printf("tab2: age=%f\n",lua_tonumber(L,-1)); //lua_pop(L, 1); // lua_getfield(L, -1, "country"); //printf("tab2: country=%s\n", lua_tostring(L, -1)); //lua_pop(L,1); printf("before call, stack top is =%d\n", lua_gettop(L)); lua_getglobal(L, "callback"); lua_pushstring(L,"C++ call info"); lua_newtable(L); lua_pushstring(L,"key1"); lua_pushnumber(L,double(1)); lua_settable(L,-3); if (lua_pcall(L, 2, 1, 0) != 0)//步骤1. 出栈所有参数;步骤2.运行栈顶的可调用对象,并出栈;步骤3.将返回值或者错误码压栈 { const char* error = lua_tostring(L, -1); printf("callback error: %s", error); return -1; } else { /* return more than one result*/ //printf("res1=%s\n", lua_tostring(L, -1)); //lua_pop(L, 1); // printf("res2=%d\n", lua_toboolean(L, -1)); // lua_pop(L,1); /*return a table*/ lua_getfield(L,-1,"status"); printf("callback result code=%d\n", lua_toboolean(L, -1)); lua_pop(L, 1); lua_getfield(L, -1, "msg"); printf("callback result code=%s\n", lua_tostring(L, -1)); lua_pop(L, 2); } printf("after call, stack top is =%d\n", lua_gettop(L)); lua_close(L); std::cout << "lua end" << std::endl; return 0; } 

到此这篇Lua脚本编程基础的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • lua游戏开发教程_lua脚本是什么2024-11-05 21:00:11
  • 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!2024-11-05 21:00:11
  • Lua脚本_用lua写图色脚本的脚本软件2024-11-05 21:00:11
  • lua脚本使用_lua怎么写游戏脚本2024-11-05 21:00:11
  • lua游戏脚本开发论坛_lua编程软件2024-11-05 21:00:11
  • Nginx实战:LUA脚本_环境配置安装_lua+nginx2024-11-05 21:00:11
  • 91免费视频Redis+Lua解决高并发场景在线秒杀问题2024-11-05 21:00:11
  • 91免费视频Redis+Lua解决高并发场景在线秒杀问题2024-11-05 21:00:11
  • 91免费视频Redis+Lua解决高并发场景在线秒杀问题2024-11-05 21:00:11
  • 微信QQ消息轰炸vbs脚本2024-11-05 21:00:11
  • 全屏图片