Web Lua

lua-users home
wiki

關於

這是一個在網路介面後執行 Lua 的版本 [1]

版本

按一下版本按鈕會告訴你它使用了哪一個版本的 Lua。例如,它目前會顯示

Lua 4.0  Copyright (C) 1994-2000 TeCGraf, PUC-Rio

執行 Lua 程式碼

請輸入

print("hello world")
Lua 程式碼區段,然後按一下lua按鈕。

Lua 編譯程式碼

Lua 會將原始程式碼編譯到一個中間格式來執行。如果您按下luac按鈕,您將會看到

luac generates the follow output:

main <0:@/tmp/abcdefg> (4 instructions/16 bytes at 0x12345678)
0 params, 2 stacks, 0 locals, 2 strings, 0 numbers, 0 functions, 3 lines
     1	[2]	GETGLOBAL  	0	; print
     2	[2]	PUSHSTRING 	1	; "hello world"
     3	[2]	CALL       	0 0
     4	[2]	END

您可以在 VM 程式碼中看到print("hello world")程式碼的元素。不過我們在此不會詳細說明這個部分。

從 Lua 產生 C 程式碼

如果我們按下lua2c按鈕,您會看到

lua2c generates the following:

static int MAIN(lua_State *L)
{
 lua_getglobal(L,"print");
 lua_pushstring(L,"hello world");
 lua_call(L,1,0);
 return 0;
}

一個 Lua 腳本(稱為lua2c.lua)已經從luac的輸出中產生上述程式碼。如果您想讓 C 和 Lua 互動,請使用 Lua C API。為了解決這個時效問題,您可以在Lua 程式碼視窗中輸入您想做的事並按下lua2c按鈕。這會產生程式碼,讓您可以剪貼到您的 C 程式碼中。

範例

假設您想要讀取值foo.x,其中foo是一個包含數字x的資料表。我們可以在 WebLua中輸入value = foo.x,然後lua2c會給我們

static int MAIN(lua_State *L)
{
 lua_getglobal(L,"foo");
 lua_pushstring(L,"x");
 lua_gettable(L,-2);
 lua_remove(L,-2);
 lua_setglobal(L,"value");
 return 0;
}
我們可以剪貼並貼上所需的程式碼,然後使用 Lua API 取得數字,而不是設定變數value,例如
 lua_getglobal(L,"foo");
 lua_pushstring(L,"x");
 lua_gettable(L,-2);
 lua_remove(L,-2);
 double value = lua_tonumber(L,-1); /* code we added */


最近變更 · 喜好設定
編輯 · 歷史記錄
最後編輯於 2003 年 4 月 6 日上午 1:24 GMT (diff)