Lua:收到期望的结果然后不会改变代码

时间:2014-05-16 17:44:34

标签: lua

现在我尝试使用Lua从外部源发出的条形码接收变量。当我运行此操作时,rotation中的变量local function rot(input)似乎是"错误"。如果我完全按照下面的print语句运行此代码,rotation将会出现并消失。请帮助我理解为什么会发生这种情况?

请注意:我目前正在处理此代码的两个方面。 A)Code128没有正确检索变量。 B)我的代码肯定可以缩短。但是我和我一起学习并学习。这个主题的主要目的是帮助我理解为什么代码有时会显示所需的结果,然后在下一分钟就赢了?

谢谢。

编辑:我已经更新了一些代码以使其更清晰。将所有string.match语句压缩到包含其他条形码相关字段的表中。仍在学习并希望让它更清洁。我喜欢学习这个,但我仍然遇到local function rot(input)同样的问题,并且得到了间歇性的结果。非常感谢任何帮助!

local function rot(input)
rotTable = {["R"] = "cw", ["I"] = "180", ["B"] = "ccw"}
for k,v in pairs (rotTable) do
    if input == k then
        rotation = v
    else
        rotation = ""
    end
end
return rotation
end

local function barCode(input)

local bcID = string.match(input,"%^(B%w)")
    if bcID == "BY" then
        bcID = string.match(input,"%^BY.*%^(B%w)")
    end
local bcTable = {
    ["BC"] = {"code128", 10,  string.match(input,"%^BY.*%^BC(%u),(%d*),(%u),%u,%u%^FD(.*)%^FS")},
    ["B2"] = {"bc2of5i", 20, string.match(input,"%^B2(%u),(%d*),(%u),%u,%u%^FD(.*)%^FS")},
    ["BE"] = {"ean13", 10, string.match(input,"%^BE(%u),(%d*),(%u),%u%^FD(.*)%^FS")},
    ["B8"] = {"ean8", 10, string.match(input,"%^B8(%u),(%d*),(%u),%u%^FD(.*)%^FS")},
    ["B3"] = {"code39", 10, string.match(input,"%^B3(%u),%u,(%d*),(%u),%u%^FD(.*)%^FS")},
    ["BU"] = {"upc_a", -1, string.match(input,"%^BU(%u),(%d*),(%u),%u%,%u^FD(.*)%^FS")}
    }

for k,v in pairs (bcTable) do
    if bcID == k then
        bcFields = v
        bcType, qzone, bcR, bcH, bcHr, bcData = unpack(bcFields)
    end
end

hPos = 0
vPos = 0

bcOutput = '<'..bcType..' qzone=\"'..qzone..'\" hbb=\"0\" vbb=\"0\" bbwidth=\"1\" hpos=\"'..hPos..'\" vpos=\"'..vPos..'\" rotation = \"'..rot(bcR)..'\" bgcolor=\"0\" barcolor=\"255\" textcolor=\"255\" barwidth=\"1\" height=\"8\">'..bcData..'</'..bcType..'>'

return bcOutput

end

print(barCode("^BY3^BCN,102,N,N^FDCHF05000042^FS"))
print(barCode("^B2B,110,N,N,N^FD45681382^FS"))
print(barCode("^BUN,183,N,N,N^FD61414199999^FS"))
print(barCode("^B8I,146,N,N^FD212345645121^FS"))
print(barCode("^BEB,183,N,N^FD211234567891^FS"))

1 个答案:

答案 0 :(得分:1)

我不确定您的代码有什么问题,如果有的话,rot可以更简单地编写为

local rotTable = {["R"] = "cw", ["I"] = "180", ["B"] = "ccw"}
local function rot(input)
   return rotTable[input] or ""
end

通常,您不需要搜索Lua表。例如,循环for k,v in pairs (bcTable) do可以通过索引替换,如上面的代码所示。