lua指令碼的幾個疑問LUA指令碼的幾個疑問

2021-03-07 07:34:49 字數 1477 閱讀 4561

1樓:匿名使用者

關於dostring中的區域性變數 這裡剛好是有個特殊情況的

我用的luaforwindows直接執行的 沒dostring 就先用loadstring了

local a = 1

print(loadstring("a = 123")())

print(a,_g.a)

這裡a = 123執行時 不會給區域性變數a進行賦值操作,而是修改了全域性變數a

對於到底是區域性變數還是全域性變數的判斷 依據的是 使用這個變數的這個區域 在使用之前 是否有過區域性變數的宣告

比如a = 1

print(a)

local a = 2

print(a,_g.a)

這樣就能看到2個不同的a

而在function msg(x,y)中

是因為x和y是被當作實參傳過來的 函式裡的實參 在函式內部都是作為區域性變數來使用 所以xy是區域性而a是全域性

2樓:匿名使用者

a = dostring.....

dostring最後一個返回值,就是準備給a的。

c++繫結函式返回時,它只能且必須返回一個值,這個值通知lua,我返回了幾個值在堆疊裡。你不返回這個值的話,難道讓lua去猜你會返回幾個值?你這裡設了返回值個數後,lua才會給你分配保留適當的空間,不然你返回後,之前放的返回值就丟了。

dofile和dostring一樣,會先獲取原始檔或字串內容,然後編譯,再逐條執行**。

你說的多執行緒,我不明白你的意思,就不說了。

最後那個x和y當然是臨時的,而那個a,是全域性的了。

lua5.2和之前的版本不一樣了,「全域性」不是真正的全域性,而是當前環境的全域性,仔細去看看lua5.2的官方文件。

關於在c++中呼叫lua指令碼的幾個簡單問題、、求達人!3q!

3樓:匿名使用者

lua_state* p = lua_open();

//建立lua虛擬機器的環境。#define lua_open() lual_newstate()

luaopen_base(p);

luaopen_math(p);

luaopen_string(p);

//以上加入這些庫,就像c包含標頭檔案

lua_settop(p, 0);

//清空棧空間

lua_getglobal(p, "key");

//取一個全域性變數為版

「key」,權壓入棧頂

int temp = lua_isstring(p, 1);

//當判斷值是一個字串或是一個數字(數字總能轉換成字串)時,返回 1 ,否則返回 0

const char* str = lua_tostring(p, 1);

//把棧頂的資料轉換成字串。這個函式沒有出棧功能,可以使用lua_pop(p,1)將棧頂元素彈出lua_close(p);

//釋放資源

lua指令碼怎麼傳遞引數,lua指令碼怎麼傳遞引數

只能呼叫 來了自,多加一個引數,for i 1,5 do nret rw math.random 6 x002103 oneventrequest sceneid,selfid,targetid,eventid,nret rw end或者把nret rw作為全域性變數。static int abc ...

lua裡怎麼呼叫shell指令碼

cd home czfshine 生成du要執行zhi的sh指令碼 dao echo pwd 1.sh生成lua檔案 版 echo os.execute sh 1.sh 1.lua ls1.sh 1.lua 執行權lua檔案 lua 1.lua home czfshine 怎樣給lua指令碼傳遞引數...

LUA指令碼的不定參函式怎麼封裝急

兩種方式 1 指令碼內定義全域性函式 非local的 然後在別的指令碼require這個指令碼後直接通過名稱版和引數進行呼叫 類似權c函式的呼叫 2 指令碼內定義一個message handler的入口函式 類似main函式 這個入口函式接受一個msg和一系列的params。然後別的指令碼或函式通過...