Web Lua

lua-users home
wiki

关于

这是一个在 Web 界面后面运行的 Lua 版本 [1].

版本

点击 **版本** 按钮会告诉你它使用的 Lua 版本。例如,它目前会显示

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

运行 Lua 代码

尝试在 Lua 代码 区域中输入

print("hello world")
并点击 **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 的表。我们可以将 value = foo.x 输入到 WebLua 中,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 API 获取数字,例如
 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 (差异)