婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Lua腳本調用外部腳本

Lua腳本調用外部腳本

熱門標簽:上海企業外呼系統排名 400手機電話免費辦理 百度地圖標注位置網站 開通400電話申請流程 智能語音電銷的機器人 揚州電銷外呼系統軟件 如何利用高德地圖標注家 武漢百應人工智能電銷機器人 電腦外呼系統輻射大嗎

test.lua腳本定義main函數如下:

function main(szName, num1, num2)   
  print("main()", szName, num1, num2); 
  local nRandMax = 10000;  
  local nRand = math.random(nRandMax); 
  print("nRand =", nRand) 
  return 1; 
end

現在我想在test.lua腳本中調用另外一個test1.lua腳本文件中的GetRandMax(),通常的做法是這樣的:

function main(szName, num1, num2)   
  print("main()", szName, num1, num2); 
  dofile("test1.lua")   --加載并編譯運行腳本 
  local nRandMax = GetRandMax();  
  local nRand = math.random(nRandMax); 
  print("nRand =", nRand) 
  return 1; 
end

看上去是這樣的,非常簡單,通過dofile對test1.lua文件進行加載并編譯運行,這部操作會將test1.lua文件中的函數和變量壓入全局的虛擬棧中,這樣就可以實現對GetRandMax()調用。但是這里有個問題:dofile函數接受的是需要引用的外部腳本的路徑,如果多次調用會不勝其煩,而且效率不高。可能有人誰說,那我們直接把dofile作為全局函數執行,就像這樣:

dofile("test1.lua") 
dofile("test2.lua") 
dofile("test3.lua") 
 
function main(szName, num1, num2)   
  print("main()", szName, num1, num2); 
  local nRandMax = GetRandMax();  --調用test1.lua中的函數 
  local nRand = math.random(nRandMax); 
  print("nRand =", nRand) 
  return 1; 
end

這樣做是可以的,但是仍然有些問題:

    1,如果test.lua文件dofile(test1.lua),而test1.lua文件dofile(test.lua),怎么辦!出現循環應用,執行后堆棧溢出;

復制代碼 代碼如下:

test.lua:5: too many C levels (limit is 200) in function at line 5 near '"main()"'

    2,dofile的路徑問題,每次都要傳入文件的絕對路徑,如果路徑不正確,無法正常執行,這也是個很煩的事。

復制代碼 代碼如下:

cannot open \script\test.lua: No such file or directory

那怎樣做才更好呢?既然dofile有這些的問題,我們就把這些問題解決。在C/C++中實現Include腳本接口函數,在腳本中作為全局函數調用,實現外部腳本文件包含功能。

//腳本接口 TLua_Funcs g_GameFunc[] = { 
  { "Include",        LuaInclude }, 
  { "ReloadAllScript",    LuaReloadAllScript}, 
  { "SayHello",       LuaSayHello }, 
  { "StopGame",       LuaStopGame }, 
};

在Include函數中使用set集合避免重復包含的問題,獲取當前的執行路徑拼接成絕對路徑,這樣就省了不少事;)

Include("\\script\\test1.lua") --Include腳本接口 
 
function main(szName, num1, num2)   
  print("main()", szName, num1, num2); 
  local nRandMax = GetRandMax();  --調用test1.lua中的函數 
  local nRand = math.random(nRandMax); 
  print("nRand =", nRand) 
  return 1; 
end

您可能感興趣的文章:
  • Cocos2d-x中調用Lua及HelloWorld.lua源碼分解
  • C++中調用Lua函數實例
  • Lua中調用C++函數實例
  • Lua中的閉合函數、非全局函數與函數的尾調用詳解
  • Lua中調用函數使用點號和冒號的區別

標簽:宜賓 新余 延邊 黑龍江 江西 張掖 嘉峪關 武漢

巨人網絡通訊聲明:本文標題《Lua腳本調用外部腳本》,本文關鍵詞  Lua,腳本,調用,外部,Lua,腳本,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua腳本調用外部腳本》相關的同類信息!
  • 本頁收集關于Lua腳本調用外部腳本的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 永宁县| 司法| 莲花县| 连州市| 连南| 维西| 易门县| 项城市| 银川市| 玉屏| 宁强县| 曲靖市| 布拖县| 克什克腾旗| 镇宁| 阳曲县| 万山特区| 定日县| 松桃| 铜梁县| 永修县| 沐川县| 石家庄市| 南靖县| 汕尾市| 安陆市| 织金县| 无极县| 宜君县| 南京市| 清新县| 福鼎市| 峨山| 鹿邑县| 黄梅县| 磐石市| 延庆县| 凌源市| 保德县| 同江市| 神农架林区|