我对lua非常陌生,所以请不要介意新手问题。由于措辞怪异,我无法在此处找到确切的问题。
我有下表:
local DialogueMode = {
uniqueDialogue = {0, 3},
general = {1, 2},
job = {3, 5},
rumors = {4, 3},
annoyed = {5, 0},
pissed = {6, 0},
ignore = {7, 0}
}
以及以下循环:
for k,v in pairs(DialogueMode) do
print(k .. ' ' .. tostring(isDialogueModeCompatible(playerTools, npc, k)))
end
这是if函数:
local function isDialogueModeCompatible(playerTools, npc, dialogueMode)
print(tostring(dialogueMode) .. " " .. tostring(DialogueMode.uniqueDialogue) .. " " .. tostring(dialogueMode == DialogueMode.uniqueDialogue))
end
对于uniqueDialogue,它会打印出:
uniqueDialogue table: 4df7e3ad false
为什么dialogMode == DialogueMode.uniqueDialogue不能按我预期的方式工作,以及如何使其按预期运行?我在哪里检查dialogMode是否等于表中的键。我实际上正在尝试将表用作枚举数,但这给我带来了问题。
谢谢!
答案 0 :(得分:1)
这里的问题是,您要打印什么?您要它只是转储桌子吗?如果您希望函数以递归方式搜索表格并打印出来,那么这比递归的结果要复杂得多。
此外,dialogueMode == Dialoguemode.uniqueDialog
返回false的原因是为dialogueMode
分配了值k
,它是字符串"uniqueDialog"
。
Dialoguemode.uniqueDialog
是整个uniqueDialog
表,而dialogueMode
只是键,即表的名称,已转换为字符串。
代码如下:
--Not my code, credit here: https://gist.github.com/hashmal/874792
function tprint(tbl, indent)
if not indent then indent = 0 end
for k, v in pairs(tbl) do
formatting = string.rep(" ", indent) .. k .. ": "
if type(v) == "table" then
print(formatting)
tprint(v, indent+1)
else
print(formatting .. v)
end
end
end
tprint(DialogueMode)
请注意,这可能不适用于所有情况,但对于您的表,它确实会成功转储整个表。如果您遇到错误,请检查github以获取修复(或自行修复:D)
这是使用DialogueMode表时得到的输出:
pissed:
1: 6
2: 0
rumors:
1: 4
2: 3
general:
1: 1
2: 2
ignore:
1: 7
2: 0
annoyed:
1: 5
2: 0
job:
1: 3
2: 5
uniqueDialogue:
1: 0
2: 3
编辑:不确定您要查找的是什么,也许不是,但是希望它对您有所帮助。
答案 1 :(得分:1)
同样,我也不是100%确定您要查找的内容,但是也许您可以修改此代码并从那里开始工作。这段代码循环并检查是否可以在DialogueMode中找到与其当前正在打印的表相同的表。如果表不相同,则不会在表旁边打印“ true”。
无论如何,这是代码,我希望它以某种方式对您有帮助。如果不是,请删除此答案:
local DialogueMode = {
uniqueDialogue = {0, 3},
general = {1, 2},
job = {3, 5},
rumors = {4, 3},
annoyed = {5, 0},
pissed = {6, 0},
ignore = {7, 0}
}
local function isDialogueModeCompatible(playerTools, npc, dialogueMode)
for v, x in pairs(DialogueMode) do
if (DialogueMode[v] == dialogueMode) then
bool = true;
int = v;
break;
end
end
return(tostring(dialogueMode)..". Match Found: "..tostring(bool));
end
for k,v in pairs(DialogueMode) do
print(k .. ' ' .. tostring(isDialogueModeCompatible(playerTools, npc, v)));
end
答案 2 :(得分:0)
显然,v存储了正确的比较。
IE。
for mode, value in pairs(DialogueMode) do
print(tostring(value) .. " " .. tostring(DialogueMode.uniqueDialogue) .. " ")
end
打印:
table: 140b90e8 table: 140b90e8