We have a problem in our project,we use lua 5.1 as our scripting language.
但是当在一个函数中使用lua_pushnumber将太多的数据从C++传递给lua时,lua堆栈看起来像是堆栈溢出,导致C++中的其他内存部分已经被写入,当回调返回到C++时,它会导致系统崩溃。我想知道是否有一些参数来控制lua堆栈的大小。我尝试更改在lua.h中定义的参数LUA_MINSTACK,但它似乎不起作用。我还尝试使用lua_checkstack()来避免将太多数字推送到lua堆栈,但它也不起作用
getNineScreenEntity
我正在处理lua混淆器,如果没有参数,我希望它能够从文件中的模糊代码中切换,或者混淆lua cli中的字符串参数。如果这完全没有意义的话,这就是我的意思。
local Code = function()
print("test")
end
Dumped = string.dump(Code)
if arg[1] then
local function Temp()
loadstring(arg[1])()
end
Dumped = string.dump(Temp)
end
问题是,在转储中,它实际上不是参数,而是变量。那么,
如您所知,浮点有一个精度问题,即值1将为0.9999999。lua在C中使用==来检查两个双数字是否相等。所以问题是:
a = 5.6
b = 14 * 0.4
print(a==b) ; => false
但更糟的是:
a = 1
...
if a < 1 then print("<1") end ; => sometimes a < 1
那我怎么才能避免这种情况?我查看了lua源代码,似乎可以在luaconf.h中修改luai_numeq/luai_numle)宏,但这有必要吗?
更新
第二个例子并不是真的正确。实际上,我的问题是,我将一个值
Lua文档指出,Lua使用double表示类型为number的值,这允许使用浮点数正确地表示所有长整数值。
但是,我在代码中看到,lua_Number实际上是一个浮点。这给了我以下的警告:
warning C4244: 'argument' : conversion from 'double' to 'lua_Number', possible loss of data
适用于:
double fVarVal = 0.0;
lua_pushnumber( L, fVarVal );
那么在Lua中类型数的值是如何表示的呢?浮动还是双倍?如果它们使
我在Lua中有这个阶乘演算的脚本:
N, F = 1, 1
while F < 1e200 do
print(N .. "! is " .. F)
N = N + 1
-- Compute the factorial of the new N based on
-- the factorial of the old N:
F = F * N
end
Lua 5.3中的这段代码有什么问题?在19!之后,一切都变得很奇怪。但同样的代码在Lua5.1中工作得很好。
在我的C++程序中,我需要知道Lua变量是整数还是浮点数。C应用编程接口提供了lua_isnumber(),但此函数不区分int/float/double。
到目前为止,我已经通过使用modf()解决了这个问题
if (lua_isnumber(luaCtx, -1)) // int / unsigned int / float:
{
luaVarName = lua_tostring(luaCtx, -2);
double n = static_cast<double>(lua_tonumber(luaCtx, -1));
// Figure out i
在python中,您可以执行help(str)在解释器中读取相应的内置文档。如果我在lua解释器中使用相同的方法:
> help(str)
stdin:1: attempt to call global 'help' (a nil value)
stack traceback:
stdin:1: in main chunk
[C]: in ?
我怎样才能读到内置的lua文档?
我在Delphi中创建了一个函数,以便能够在Lua中使用它。我已经成功地创建了一个过程(或不获取结果的函数),它工作得很完美。问题是,现在我想将该函数(不再是一个过程)的结果从Delphi中获取到Lua中。我已经阅读了一些代码,但无法使其工作。
我的函数如下所示:
function TLuaScripter.getsetting(LuaState: TLuaState):TluaState;
var
path,stri: string; i:integer;
begin //getsetting('Targeting/TargetingEnabled')
我编写了一个小脚本(在Lua中处于一个非常基本的级别),它输出了一个值表:
-- ProbabilityOfOralExam.lua
-- This script outputs a data file where in the first column are
-- written the numbers that are the possible sum of the digits for
-- the numbers belonging to Range and in the second column is
-- computed how many times that number