成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析調用Lua函數使用方法

移動開發 iOS
調用Lua函數使用方法是本文要介紹的內容,本教程涵蓋了Lua5.1。在Lua的每一個版本中都有一些非常不同之處,具體內容來看本文詳解。

調用Lua函數使用方法是本文要介紹的內容,本教程涵蓋了Lua5.1。在Lua的每一個版本中都有一些非常不同之處。下面的示例代碼將不能在老版本的Lua下運行。這篇文章將教你如何在Lua中定義一個函數,然后在C/C++程序中調用它。同時,我們將學習到參數傳遞,返回值,以及處理全局變量。

你的***個Lua函數

Lua中定義函數是相當簡單的。Lua函數以關鍵字"function"開頭,后面跟隨函數名,然后是參數列表。函數定義以關鍵字"end"結束。Lua函數能夠接受多個參數,而且可以返回多個參數。

下面是一個實現兩個數相加并返回結果的Lua函數。我們將它保存為"add.lua"文件。

  1. -- add two numbersfunction add ( x, y )return x + yend  

在Lua入門中,我們已經知道調用luaL_dofile()就是執行腳本。因為在本文中我們只定義了一個函數,故只需簡單地調用luaL_dofile()函數就能執行add函數。

我在前面已經說過,Lua函數能夠接受多個參數,返回多個結果。這是用棧來實現的。

為了調用一個Lua函數,首先需要將函數壓入棧中。再將參數壓入。然后,調用lua_call()去調用Lua函數。函數調用完成之后,返回值存在于棧中。所有這些步驟將被展示在luaadd()函數定義中。

調用lua_getglobal()將add()函數壓入棧中。

調用lua_pushnumber()將***個參數x壓入棧中。

同樣,調用lua_pushnumber()將第二個參數y壓入棧中。

調用lua_call(),其參數的意思是兩個參數,一個返回值。

現在,我們可以利用lua_tointeger()獲得整型返回值。

***,調用lua_pop()將值從棧中移出。

保存文件為luaadd.cpp。如果你直接使用C而不是C++,將文件名改為luaadd.c,然后將extern "C"刪除。

  1. #include <stdio.h>  extern "C" {   
  2. #include "lua.h"   
  3. #include "lualib.h"   
  4. #include "lauxlib.h"  
  5. }    
  6. /* 指向Lua解釋器的指針 */  
  7. lua_State* L;   
  8. int luaadd (   
  9. int x, int y   
  10. ){  
  11.  int sum;  
  12.   /* 通過名字得到Lua函數 */  
  13.  lua_getglobal(L, "add");   
  14.  /* ***個參數 */  
  15.  lua_pushnumber(L, x);   
  16.  /* 第二個參數 */  
  17.  lua_pushnumber(L, y);   
  18.  /* 調用函數,告知有兩個參數,一個返回值 */  
  19.  lua_call(L, 2, 1);   
  20.  /* 得到結果 */  
  21.  sum = (int)lua_tointeger(L, -1);  
  22.  lua_pop(L, 1);   
  23.  return sum;  
  24.  }    
  25.  int main ( int argc, char *argv[] ){   
  26.  int sum;   
  27.  /* 初始化Lua */  
  28.  L = lua_open();   
  29.  /* 載入Lua基本庫 */  
  30.  luaL_openlibs(L);   
  31.  /* 載入腳本 */  
  32.  luaL_dofile(L, "add.lua");   
  33.  /* 調用Lua函數 */  
  34.  sum = luaadd( 10, 15 );   
  35.  /* 顯示結果 */  
  36.  printf( "The sum is %d/n", sum );   
  37.  /* 清除Lua */  
  38.  lua_close(L);   
  39.  /* 暫停 */  
  40.  printf( "Press enter to exit…" );  
  41.  getchar();   
  42.  return 0;  
  43.  }  

編譯

在Linux下,在命令行鍵入:

  1. g++ luaadd.cpp -llua -ldl -o luaadd  

然后,鍵入下列命令運行:

  1. ./luaadd 

如果沒有問題, 程序將顯示結果為: "The sum is 25"。

在Visual C++你將需要進行下列步驟:

創建一個新的空Win32控制臺應用工程。

將"luatest.cpp"加入你的工程。

選擇項目菜單中的屬性菜單。

在"連接器"的"輸入"欄目的"附加依賴項"中輸入"lua5.1.lib"。

確定。

此時,按F7構建程序。

如果你采用的是dll庫,請確保將其放在應用程序的目錄中或者windows系統能夠找到它的地方。如果你采用的是靜態連接庫,則不需要。 

全局變量

全局變量在Lua中也很好處理。就像我們看到的,lua_getglobal()將一個Lua全局變量壓入棧中。例如,在Lua腳本中包含一個全局變量z,下面代碼的功能就是得到它的值:

  1. lua_getglobal(L, "z");z = (int)lua_tointeger(L, -1);lua_pop(L, 1);  

相應地,lua_setglobal()函數能夠設置全局變量地值。下面這段代碼演示了如何將Lua全局變量z的值變為10:

  1. lua_pushnumber(L, 10);lua_setglobal(L, "z");  

應該記住:在Lua中,我們沒有必要顯式定義一個全局變量。如果全局變量不存在,調用lua_setglobal()將為你創建一個。

小結:解析調用Lua函數使用方法的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-23 09:44:28

LUA腳本

2010-10-08 14:27:25

JavascriptSplit

2011-06-14 10:18:58

QThread Qt 線程

2009-11-24 16:18:14

PHP5析構函數

2010-08-09 10:16:01

FlexBuilder

2011-06-30 16:53:18

QT Creator TableWidge

2009-11-16 16:54:00

PHP構造函數

2009-12-07 16:52:59

PHP函數getima

2009-11-30 17:43:54

PHP split()

2013-06-08 17:09:35

Android開發移動開發XML解析

2009-11-25 10:02:27

PHP會話Sessio

2011-08-25 16:47:53

LuaC++ 證書

2009-11-16 15:40:58

PHP數組函數

2009-11-26 19:05:04

PHP函數explod

2009-11-26 15:23:24

PHP函數ereg()

2011-07-12 17:18:23

PHPstrtotime

2021-07-16 07:57:35

JavaScriptEval函數

2011-02-24 13:09:10

FireFTP

2009-08-28 17:01:43

C#構造函數

2024-09-03 13:32:11

JavaScriptEval函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: xxxxx黄色片| 中文字幕在线第一页 | 午夜精品久久久久久 | 久久精品国产一区 | 久久久噜噜噜久久中文字幕色伊伊 | 成人国产精品入口免费视频 | 中文字幕免费视频 | 中国三级黄色录像 | 一区福利视频 | 欧一区二区 | 一区二区三区四区在线视频 | 超黄视频网站 | 日韩欧美在线不卡 | 日韩中文字幕 | 国产高清久久 | 99在线精品视频 | 91精品国产91久久久久久丝袜 | 欧美片网站免费 | 99精品欧美一区二区三区 | 91av视频在线 | 先锋影音资源网站 | 在线观看视频91 | 中文字幕综合 | 午夜久久久久久久久久一区二区 | 一级大片免费 | www.4567| 国产精品五区 | 国产福利视频 | 亚洲视频中文字幕 | 一区二区视频在线 | 亚洲一区二区中文字幕 | 日韩av视屏 | 日韩视频一区在线观看 | 国产一区二区三区 | xxx视频 | 欧美精品在线一区 | 久久精品中文 | 日韩欧美三区 | 色欧美日韩 | 久久免费精品 | 成人毛片视频在线播放 |