我有一个方法,它从lua中的父列表指针构建树。特别是我有这个lua表
parents = {2,3,13,5,12,7,11,9,10,11,12,13,14,0}
同时还有两项职能:
函数1(创建节点):
function create_node(parent, i, created, root)
if created[i] ~= nil then
return
end
print(i)
-- print(parent)
-- Create a new node and set created[i]
local new_node = Tree(
我创建了一个空表t,然后尝试使用函数破坏来设置它为零。在函数中,表变为零,但在函数之外,直到我显式地将它设置为零,它才发生任何变化。
有没有方法通过使用Lua中的函数将表设置为零?
local t = {}
local function destroy(input)
print("in function",input)
input = nil
print("in function",input)
end
print(t)
destroy(t)
print(t)
t = nil
print(t)
一个非常奇怪的错误,显示一个对象为0.
主题的代码是
while pbs:HasNext() do
local char = self.DecodeCharacter(pbs)
...
有人会认为,如果pbs:HasNext()是true,那就意味着,无论什么,pbs是而不是 nil。
然而,打印(Pbs)- HTMLEntityCodec:DecodeCharacter的第一行打印nil
function HTMLEntityCodec:DecodeCharacter(pbs)
print(pbs)
...
在下面转储的整个文件中,它被从1800+行剥离到11
考虑以下的Lua代码:
local util = {}
function util:foo(p)
print (p or "p is nil")
end
util.foo("Hello World")
util.foo(nil, "Hello World")
当我在lua控制台中运行这个程序时,我会得到以下结果:
p is nil
Hello World
有人能给我解释一下这种行为吗。
编辑I通过进行以下更改使代码工作:
local util = {}
function util.foo(p)
print (p or "p
我想为某些lua_State中的表设置额外的“方法”。
国家有这样的代码:
obj = {}
function obj:method1()
print("value from second method = " .. self.method2())
end
我通过do_file()方法加载它。之后,我想将method2()添加到表obj中。这个method2()必须在堆栈上获得表obj (作为self)才能正常工作。
我试着这样做:
state.get_global("obj");
if state.is_table(-1) {
state.pu
我正在研究的框架可以用Lua模块进行扩展。每个模块的Lua源代码都是用我们的编译器编译的,编译器基于官方的Lua解释器,然后保存为字节码。这些单元必须满足某些要求:
-- Must be a non-empty string consisting only of characters in the range a-z
name = "foo"
-- Must not only be a number, but also an integer greater than zero
version = 1
如果在将Lua源代码编译到模块中时能够检查这些需求,那就太好了。这将使生活更
我在C/++中有一个LUA回调,我正在尝试使用lua_gettop()来检测一个可选的第一个参数。问题是lua_gettop(L) == 1总是正确的,即使我在LUA中没有提供任何参数。 下面是我用C/++编写的回调函数的基础知识: int LuaFile::l_cpp_my_callback(lua_State *L) {
LuaFilePtr my_this = lua_map_[L];
if ( lua_gettop(L) == 0 ) {
// I never get here
} else if(lua_gettop(L) == 1) {
我仍然在使用lua,而且我对这个语法不太熟悉。当您以如下所示的参数传递函数时,会发生什么?
Comm.setRouting(function(url)
for i = 1,4 do
local portIndex = "Path"..i
if url:match(portConfig[portIndex]) ~= nil then
return Comm.slots()[1], Comm.groups()[i]
end
end
end)
我试图通过使用C将函数值存储在弱表中来创建函数值的GC终结器。
首先,我用纯Lua5.2编写了一个原型:
local function myfinalizer()
print 'Called finalizer'
end
function myfunc()
print 'Called myfunc'
end
local sentinels = setmetatable({}, { __mode='k' })
sentinels[myfunc] = setmetatable({}, { __gc=myfinalizer })
my
我对Lua很陌生,并试图在Lua中理解OOP的概念。为此,我尝试创建一个对象,并创建方法和“私有变量”。我的问题是,当我尝试使用"setters“或"getters”时,它表明我的表正在返回NIL,这意味着我有一个范围问题或其他一些我无法弄清楚的问题。
关键是,我使用了一个来自在线Lua编码教程的示例,当我运行该教程时,它运行得完美无缺。但是,当我运行我的函数时,每当我试图从一个成员函数中“获取”或返回一个值时,我都会得到零或没有输出。
我正在使用几种不同的环境:
ZeroBrainSublime TextLua for Windows
您知道为什么我的代码没有返回填充的表吗?
在这一段代码中,我得到了以下错误:
[ERROR] lua/entities/cook/init.lua:58: attempt to index global 'self' (a nil value)1. cooked - lua/entities/cook/init.lua:58
函数从第57行开始,当我删除第58行(local Pos = self.Entity:GetPos()时,它只为第61行提供相同的错误消息。
function cooked()
local Pos = self.Entity:GetPos()
local roll = math.r
在我的lua脚本中,我需要调用一个函数,该函数接受任意数量的参数和任意数量的参数…
我把我的论点建立成一个表,因为我不知道会有多少个论点。
示例代码:
local result = call.someFunc();
local arguments = {}
for k,v in pairs(result) do
table.insert(arguments, v.name)
end
-- here I would like to somehow pass the whole table and each item in the table
-- is then passed as
1.在games50中实现马里奥游戏时,我遇到了错误,错误显示在statemachine中等等。
function StateMachine:change(stateName, enterParams)
assert(self.states[stateName]) -- state must exist!
self.current:exit()
self.current = self.states[stateName]()
self.current:enter(enterParams)
end
误差
sr
下面的程序将文本文件从windows格式转换为POSIX格式(这意味着将回车序列-换行符转换为换行符)
local inp = assert(io.open(arg[1], "rb"))
local out = assert(io.open(arg[2], "wb"))
local data = inp:read("a")
data = string.gsub(data, "\r\n", "\n")
out:write(data)
assert(out:close
我现在用我正在创建的一个电晕应用程序来解决这个问题。
我有一个文件结构,如下所示: App ->类、->对象、->工具
应用程序文件夹中有main.lua、menu.lua、level.lua和Class.lua。在“类”文件夹中有Object.lua。在物体上,ship.lua和最后在船上的是我的不同的船,即玩家和敌人。
我遵循了,我的代码与他的(酒吧播放器和敌人类)几乎完全相同,但是在Class.lua中仍然收到这个错误
“关于‘可分割’的错误论点#2 (预期为零或表)”
我收到的错误代码是
function Class(Super)
Super = Super
我来自Lua和Python两种语言,这两种语言都将它们的字符串值视为对象。我只是想知道,字符串值实际上是对象吗?我的意思是,在Lua中,您可以配置它们的元对象并在它们上使用方法,而在Python中,您可以直接说一些类似于print("".format)的话。
另一个示例(在Lua中)可以将一个方法添加到字符串值中,如下所示:
#Prototype object
local proto = {}
function proto:print()
print(self) -- "self" will be the string
end
#String'
我在Lua中有一个在表上操作的函数,它反复向表中添加条目:
function DoStuff()
local table = {};
for i = 1, 1000 do
local name, value = GetSomething(i);
if (CheckSomething(name, value))
table[name] = value
end;
end;
end;
我知道这是快速的;Lua有一个很好的哈希表算法。但是现在我需要将我的部分功能分开,这样我就可以对它进行单元测试:
fun
我编写了简单的类来压缩数据。下面是:
LZWCompressor = {}
function LZWCompressor.new()
local self = {}
self.mDictionary = {}
self.mDictionaryLen = 0
-- ...
self.Encode = function(sInput)
self:InitDictionary(true)
local s = ""
local ch = ""
local len = string.len(sInput)
loc
背景:
我试图教自己Lua,我很难理解为什么当一个表中有数据时,它被认为是零。有人能帮我分析一下为什么我从下面的代码片段中得到这个错误消息吗?这是我的第一批程序之一,在进入我的真正的项目之前,我真的需要把这几个概念弄下来。谢谢!
错误消息:
C:\Users\<user>\Desktop>lua luaCrap.lua
lua: luaCrap.lua:7: attempt to call global 'entry' (a nil value)
stack traceback:
luaCrap.lua:7: in main chunk
如何在lua的表中定义函数?我尝试了这段代码,但不能工作。我想使用table:myfunc()。
local myfunc
myfunc = function(t)
local sum = 0
for _, n in ipairs(t) do
sum = sum + n
end
return sum
end
mytable = {
1,2,3,4,5,6,7,8,9
}
print(myfunc(mytable)) -- 45
我认为myfunc没有问题。
table.myfunc = myfunc
print(mytable:myfunc())
-- lua
在Lua C处理程序中,我在抛出错误之前在注册表中设置了一个标志。如果使用pcall从Lua调用处理程序,我希望确保设置(或清除)此标志。以下是更多详细信息:
我有一个使用lua_pcall从C中调用的基本Lua函数handle
function handle()
c_handle()
end
C中的句柄具有下面的基本结构,我们希望在抛出错误之前设置一个标志,以区分错误和其他错误。
int c_handle(lua_State *L)
{
if (condition) {
set a flag in registry
throw error with lua_error