Web Lua |
|
這是一個在網路介面後執行 Lua 的版本 [1]。
按一下版本按鈕會告訴你它使用了哪一個版本的 Lua。例如,它目前會顯示
Lua 4.0 Copyright (C) 1994-2000 TeCGraf, PUC-Rio
請輸入
print("hello world")
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")
程式碼的元素。不過我們在此不會詳細說明這個部分。
如果我們按下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; }
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 */