table 是個怪物,有很多facets,類似array,map,struct,整個是個混合物,用起來也比較怪異。
t={1,2,3,a="gen",b=100}
t={[0]=1;["name"]="ultra"}
t.a, t.b , t[0] , t["name"]
表操作函數:
ipairs,pairs迭代函數
table.getn(t) len of table
================================================================
function() 可以接受任意多的參數,如果實參數過多將丟棄,過少將默認設置為nil
同樣可以返回多個參數
a,b=foo()
表作為參數傳遞到function
function rename( arg ) os.rename(arg.old,arg.new) end
rename{old="";new=""}
匿名函數(lambda in python )
foo = function(x) return x*2 end
局部函數 local f=function(x) ... end
================================================================
for n=start,end,step do ... end
while b do ... end
repeat do .... until
if then .. elseif then ... end;
有意思的語法表達式:
print a or b or c 如果a=false,嘗試b...
注釋: -- --{ --}
字符串操作: .. 連接
==================================================
io 函數:
loadfile('test.lua')() execute external lua script
loadstring('print 100')()
代碼測試:
=======================
c程序調用lua函數
c 程序:
void call_lua_func(){
lua_State *s = lua_open();
luaL_openlibs(s);
int c = lua_gettop(s);
luaL_dofile(s,"/nandflashpartition/test1.lua");
lua_getglobal(s,"add");
lua_pushnumber(s,0.25);
lua_pushnumber(s,8);
if( lua_pcall(s,2,1,0)){
std::cout<< lua_tostring(s,-1)<<std::endl;
}
double r;
r = lua_tonumber(s,-1);
lua_close(s);
}
lua程序:
function add(x,y)
return x*y
end
--------------------------------
lua訪問c程序空間變量
1.定義變量student.h
extern char * gender;
extern int class_count;
2.創建pkg文件 student.pkg
$#include "student.h"
extern char * gender;
extern int class_count;
3.產生tolua++存根框架
tolua++ -o student.pkg
4.創建lua測試代碼 call_c.lua
print(gender)
print(class_count) 訪問c 空間的變量
5.c測試代碼
char * gender;
int class_count;
void lua_call_c(){
int tolua_student_open (lua_State* tolua_S);
lua_State * s = lua_open();
luaopen_base(s);
gender ="my gender is male!";
class_count = 100;
tolua_student_open(s);
luaL_dofile(s,"/nandflashpartition/call_c.lua");
lua_close(s);
}
6.build && test it!