lua學習筆記

來源:互聯網
上載者:User

 

近日時間比較充裕,學習一下lua語言,順便寫下筆記,方便以後加深學習。

為了方便,我沒有編譯lua代碼,直接下載了lua的動態庫及執行檔案

連結地址:

C/C++調用lua動態庫及標頭檔地址(用於C/C++嵌入Lua指令碼解析):

http://sourceforge.net/projects/luabinaries/files/5.1.4/Windows%20Libraries/lua5_1_4_Win64_dll8_lib.zip/download(下載這個版本需要在VS2005下編譯)

也可以到http://luabinaries.sourceforge.net/download.html或http://www.lua.org找適合自己的版本。

lua指令碼解析器地址:

http://en.sourceforge.jp/frs/g_redir.php?m=jaist&f=%2Fluabinaries%2F5.2%2FExecutables%2Flua-5.2_Win32_bin.zip

一、"hello world"

哈哈,先使用經典的hello world帶進門

1.在“運行”鍵入cmd開啟dos視窗,並將目前的目錄跳轉到lua的目錄下(我的是在C:\lua-5.2_Win32_bin)

2.在lua目錄下建立一下文字檔(test.txt)並加入內容

 print("hello world")

3.回到dos視窗,輸入執行命令lua52.exe test.txt

 

二、迴圈語句

在test.txt加入

for i=1,10,2 do

 print("i = " .. i)

end

在dos視窗輸入命令lua52.txt test.txt

註:for語句中 i = 2, 10,2是表示從1開始,每次遞增2,到10結束(包含10)

 

三. 變數

lua 的變數是不需要宣告類型的

a = 5

b = "hello"

print(a.. "  ".. b)

執行列印出來的結果如下

 

四、 table

lua的資料結構和數組都可以由table來實現,執行個體代碼如下:

aa = {}

aa["xx"] = 11

aa[3] = 22

print(aa["xx"] .." --".. aa[3])

輸出結果:

 

五、函數

lua 的函數文法為

function 函數名(參數)

  實現...

end

下面為一段執行個體

function add(a, b)

  sum = a + b

  return sum

end

print("10 + 20 = "..add(10,20))

執行結果如下:

 

六、C/C++調用lua指令碼

1.建立工程

(1).使用VS2005建立一個C++ console工程

(2).將下載到的lua5_1_4_Win64_dll8_lib.zip解壓到工程中

(3).在工程中加入對lua51.lib的依賴,可以直接在代碼裡寫如#pragma comment(lib, "lua51.lib"),出可以將其到到工程設定的依賴項目中。

 

2.C/C++調用lua的流程

C/C++調lua流程大概如下:

/*開啟lua*/

lua_State *l = lua_open();

/*開啟全部的庫*/

luaL_openlibs(l);

/*執行lua指令碼、調用lua資訊*/

...

/*關閉lua*/

lua_close(g_l);

 

 

3. 建立一下test.txt的文本並寫入如下代碼

function add(a, b)

  sum= a+b

 return sum

end

 

a1 = "hello world"

b1 = 50

 

4. 在VC工程中寫入如下測試代碼,已經帶有較詳細注釋

#include "stdafx.h"

#include <windows.h>

#include <iostream>

extern "C" {

#include "lua.h"

#include "lualib.h"

#include "lauxlib.h"

}

 

#pragma comment(lib, "lua51.lib")

 

lua_State *g_l;

 

/*調用lua的add函數*/

int lua_add(int a, int b)

{

         lua_getglobal(g_l,"add");

         lua_pushnumber(g_l,a);

         lua_pushnumber(g_l,b);

 

         lua_call(g_l,2, 1);

 

         /*get the result */

         intsum = (int)lua_tonumber(g_l, -1);

         lua_pop(g_l,1);

         returnsum;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

         /*開啟lua*/

         g_l= lua_open();

         /*開啟全部的庫*/

         luaL_openlibs(g_l);

 

         /*執行lua指令碼,直接通過字串傳入*/

         luaL_dostring(g_l,"print(100)");

         /*執行lua指令碼,通過讀取設定檔*/

         luaL_dofile(g_l,"test.txt");

 

         /*調用lua的add函數*/

         std::cout<<"calllua add(1,2) = "<<lua_add(1 , 2) <<std::endl;

        

         /*擷取b1的值*/

         lua_getglobal(g_l,"b1");

         if(lua_isnumber(g_l,-1))

         {

                   std::cout<<"b1= "<<lua_tonumber(g_l, -1)<<std::endl;

         }

 

         /*擷取a1的值*/

         lua_getglobal(g_l,"a1");

         if(lua_isstring(g_l,-1))

         {

                   intnLen = 0;

                   std::cout<<"a1= "<<lua_tostring(g_l, -1, nLen)<<std::endl;

         }

 

         /*關閉lua*/

         lua_close(g_l);

         return0;

}

執行結果:

100

call lua add(1,2) = 3

b1 = 50

a1 = hello world

 

總結,學習所花時間,很多沒有學深學細,總體來說這門語言入門比較快,易學。沒有實際的項目經驗還不能深刻理解它的優勢所在。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.