我的游戏引擎将一个值作为函数的参数推送到lua堆栈中,然后使用lua_pcall调用它。lua代码将运行并调用其他lua函数。最终,这段lua代码将调用一个C函数。此函数是否可以检索最初推送到堆栈上的值?
是这样的:
<engine function A>
pushes parameter value X on to stack for lua
<lua func>
<lua func>
<lua func>
<engine function B>
can I extract the values X that was pus
我想为lua做一个钩子函数:
对于explain,我想挂钩参数,并在函数调用时返回参数,如下所示:
function func1(x, y)
print(tonumber(x) + tonumber(y))
end
a = hookfunction(func1, function(...) -- a = old function
local args = { ... }
print("Argument 1 =>", args[1])
print("Argument 2 =>", args[2])
return a(...)
我设置了一些这样的vars:
local var1Age = 10
local var2Age = 20
local var3Age = 30
现在,我想用这样的循环来迭代它们:
for i=1, 3 do
if var..i..Age >= 21 then
print("yep")
end
end
我不能更改vars,也不能创建一个表。用这辆车有可能吗?
编辑:,我可以这样做:
if var1Age >= 21 then
print("yep")
end
if var2Age >= 21 then
在Lua程序设计的第260-263页(第4版)中,作者讨论了如何在Lua中实现“沙箱”(即不可信代码的运行)。
当谈到限制不受信任的代码可以运行的函数时,他推荐了一种“白名单方法”:
我们永远不应该考虑要删除哪些函数,而应该添加哪些函数。
这个问题是关于将这个建议付诸实践的工具和技巧。(我希望在这一点上会出现混乱,我想先强调一下)。
作者给出了下面的代码,作为基于允许函数白名单的沙箱程序的说明。(我添加或移动了一些注释,并删除了一些空白行,但我已经逐字复制了可执行内容)。
-- From p. 263 of *Programming in Lua* (4th ed.)
-- Lis
我正在使用应用程序TouchLua。
我需要将一个字符串从一个表转换成一个参数。这是我唯一想做桌子的方法。
b = {}
b[1] = "010,010,draw.blue"
function drawButtons()
for i = 1,2 do
draw.fillrect(tonumber(string.sub(b[i],1,3)), tonumber(string.sub(b[i],5,7)), tonumber(string.sub(b[i],1,3))+10, tonumber(string.sub(b[i],5,7)),string.sub(b
如何安全地从Lua堆栈读取字符串值?函数lua_tostring和lua_tolstring都会引发Lua错误(longjmp _ of /奇怪类型的异常)。因此,这些函数可能应该在保护模式下使用lua_pcall调用。但我无法找到一个很好的解决方案,如何做到这一点,并获得字符串值从Lua栈到C++。是否真的需要使用lua_pcall在保护模式下调用lua_tolstring
实际上使用lua_pcall似乎不太好,因为我想从Lua堆栈读取的字符串是由lua_pcall存储的错误消息。
require "utils.lua"
stdin:1: module 'utils.lua' not found:
no field package.preload['utils.lua']
no file 'D:\blizzard\Projects\Lua'
no file '.\utils\lua.dll'
no file 'D:\blizzard\Projects\Lua\utils\lua.dll'
no fi
当我在终端中运行我的代码时,我得到这个错误/消息:
module 'socket.http' not found:
no field package.preload['socket.http']
no file '/usr/local/share/lua/5.2/socket/http.lua'
no file '/usr/local/share/lua/5.2/socket/http/init.lua'
no file '/usr/local/lib/lua/5.2/socket/
假设我在Lua中注册了许多不同的函数名到C中的同一个函数,那么,每次调用我的C函数时,有没有一种方法来确定哪个函数名被调用了呢?
例如:
int runCommand(lua_State *lua)
{
const char *name = // getFunctionName(lua) ? how would I do this part
for(int i = 0; i < functions.size; i++)
if(functions[i].name == name)
functions[i].Call()
}
int main()
{
...
由于以下配置失败,我当前在安装PECL LUA包时遇到问题:
pecl install channel://pecl.php.net/lua-0.9.4
给予
...
checking for lua support... yes, shared
checking for lua in default path... not found
configure: error: Please reinstall the lua distribution - lua.h should be in <lua- dir>/include/
ERROR: `/tmp/pear/temp/lu
从这篇文章中,我学会了如何在C++中重新定义Lua的print()。()
下面是重新定义的print函数,它将变量打印到我的主机程序的控制台。(通过名为post..的函数)
int l_my_print(lua_State *L)
{
int nargs = lua_gettop(L);
for (int i = 1; i <= nargs; ++i)
{
if (lua_isnil(L, i))
poststring("nil");
else if (lua_isboolean(L, i))
我已经使用lua rocks安装了lua,它工作得很好。现在,我想使用love库在我的lua脚本中创建一些图形。但是我找不到任何关于如何将love代码链接到lua代码的文档...事实上,我仍然对其中的区别感到困惑。
我的印象是,爱是一套lua的库,但爱似乎有自己的二进制running...meaning它是自己的语言?
无论如何,这是我用love编写lua脚本的可悲的小尝试:
myluatest.lua:
if "test" == "test" then print("yes") else print("no") end
l