lua腳本基礎(chǔ)
1.界面的編寫(xiě)很大一部分可以通過(guò)腳本來(lái)實(shí)現(xiàn), 可以修改加腳本而不必重新編譯程序, 可以節(jié)省界面設(shè)計(jì)的時(shí)間
2.lua腳本設(shè)計(jì)目的是為了嵌入應(yīng)用程序中, 為應(yīng)用程序提供靈活的擴(kuò)展功能
3.lua腳本可以被c/c++調(diào)用, 也可以調(diào)用c/c++的函數(shù), 也可以代替xml, ini等文件, 容易理解和維護(hù)
4.lua由標(biāo)準(zhǔn)c編寫(xiě)而成, 解釋器不過(guò)200k, 在目前所有腳本引擎中, lua的速度最快, 是作為嵌入式腳本的最佳選擇
5.lua_open() 返回一個(gè)指向lua解釋器的一個(gè)指針
6.luaL_openlibs() 裝載lua庫(kù), 提供了一些簡(jiǎn)單的函數(shù), 如print
7.luaL_dofile() 執(zhí)行腳本
8.lua_close() 關(guān)閉lua
9.相關(guān)頭文件:
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#pragma comment(lib, "lua5.1.lib") //5.1版本的lua庫(kù)
lua_State* L; //lua解釋器指針
L = lua_open(); //初始化lua
luaL_openlibs(L); //載入lua基本庫(kù)
luaL_dofile(L, "test.lua"); //執(zhí)行腳本
lua_close(L); //清除lua
10.解釋器加載lua腳本程序庫(kù): dofile("test.lua")
然后就可以執(zhí)行test.lua里面的函數(shù)了
11.lua_getglobal(L, "add"); //lua庫(kù)的add全局函數(shù)
luapushnumber(L, x); //將x壓棧
luapushnumber(L, y); //將y壓棧
lua_call(L, 2, 1); //調(diào)用前面的add函數(shù), 2個(gè)參數(shù), 1個(gè)返回值
int ret = (int)lua_tonumber(L, -1); //取得返回值
lua_pop(L, 1); //彈出棧
12.lua的注釋:
單行注釋: 從"--"到行末
多行注釋: 從"--[["到"]]", 當(dāng)重新啟用這段代碼時(shí)
技巧:
--[[
語(yǔ)句
--]]
這樣注釋后, 只要在"--[["前加一個(gè)"-", 那么語(yǔ)句就可以執(zhí)行了
13.lua io輸入:
a = io.read("*number") --read a number
14.lua中唯一一種數(shù)據(jù)結(jié)構(gòu) table
15.進(jìn)入lua交互模式, 執(zhí)行os.exit()時(shí)退出交互模式
C:\>lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> os.exit()
C:\>
16.用lua -i參數(shù)來(lái)執(zhí)行l(wèi)ua解釋器時(shí), 運(yùn)行完lua程序后將進(jìn)入交互式模式
-i對(duì)于調(diào)試收工測(cè)試尤為有用
用lua -e參數(shù), 可以直接在命令行中輸入代碼:
C:\>lua -e "print(math.sin(12))"
-0.53657291800043
用lua -l 可以加載庫(kù)文件:
lua -i -l a -e "x = 10" --命令行下加載庫(kù)a, 執(zhí)行x=10操作, 執(zhí)行完后進(jìn)入交互模式
只要定義了一個(gè)名為"_PROMPT"的全局變量, 解釋器就會(huì)用它的值作為交互模式的命令提示符
lua -i -e "_PROMPT=' lua>'"
17.lua的保留字 --關(guān)鍵字:
and break do else elseif
end false for function if
repeat return then true until
while
18.全局變量不需要聲明, 只需要將一個(gè)值賦予一個(gè)全局變量就可以創(chuàng)建了, 在lua中訪問(wèn)一個(gè)未初始化的變量不會(huì)出錯(cuò), 結(jié)果是一個(gè)nil值
要?jiǎng)h除一個(gè)變量, 可以把這個(gè)變量賦值為nil
19.在交互模式中, 如果要打印任何表達(dá)式的值, 可以用等號(hào)開(kāi)頭, 并跟隨一個(gè)表達(dá)式:
= math.sin(3)
20.lua有8中基礎(chǔ)的類(lèi)型
nil(空) boolean(布爾) number(數(shù)字) string(字符串)
userdata(自定義類(lèi)型) function(函數(shù)) thread(線程)
table(表)
函數(shù)與type可以根據(jù)一個(gè)值返回其類(lèi)型的名稱(chēng)