lua學習(四)

來源:互聯網
上載者:User

    這幾天開了個小差, 把lua的很多擴充庫都用了一下, luasocket, luasql, luacom, kepler... 最後終於理解了require的作用了.  其實也就是pil提及到的搜尋載入目錄那麼簡單,當然有一個經驗就是定義LUA_PATH與package.cpath的值,就像定義include和lib的路徑一樣, 可以方便地匯入到lua環境
    本來打算用luasql的odbc庫來做資料庫訪問的開發, 執行sql語句, 遊標以及事務都成功了, 唯獨執行帶參數的預存程序不知道怎麼搞,  這可鬱悶了我很久. 由於對odbc不熟, 就查了下msdn文檔, 後面看看luasql的源碼發現於根本沒有支援預存程序的參數. 看來要麼就要自己在luasql的基礎上擴充下,要麼就要放棄它了. 手頭上的事很多, 先放放,搞清楚一下odbc再說. 
 現在又回到了pil專註lua的文法了. table真的很cool,可以輕鬆實現疏鬆陣列, 串, 隊列(單雙向), 棧,集合以及各種其它的資料結構, 而且非常好用.  metatables和metamethods確實很酷, 利用這些東西可以實現運算子多載(看上去像), 繼承(單/多),封裝, getter/setter等等. 暫時還沒有看到類的那一章. 有了前面的內容,怎麼用__index定義原型鏈構造一個類的繼承體系, 加上package, 應該八九不離十了,先意淫一把.
 忘了補充一下, 5.1  c api 中的 luaopen_*現在和lua調用其它普通c函數的過程一樣:
lua_pushcfunction(L, luaopen_*);
lua_call();
也可以用
lua_cpcall(L, luaopen_*, 0); 簡化上面兩步的操作, 實際了看lua_cpcall的源碼就知道,是一樣的
那麼現在5.1推薦的開始調用lua的寫法是這樣的: 
 lua_State *L = luaL_newstate();
 
 lua_cpcall(L, luaopen_base, 0);
 lua_cpcall(L, luaopen_io, 0);
 lua_cpcall(L, luaopen_string, 0);
 // ...
 // ...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.