Ich schrieb einfache Klasse, um Daten zu komprimieren. Hier ist sie:Einfache LZW-Komprimierung funktioniert nicht
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)
local result = {}
local dic = self.mDictionary
local temp = 0
for i = 1, len do
ch = string.sub(sInput, i, i)
temp = s..ch
if dic[temp] then
s = temp
else
result[#result + 1] = dic[s]
self.mDictionaryLen = self.mDictionaryLen + 1
dic[temp] = self.mDictionaryLen
s = ch
end
end
result[#result + 1] = dic[s]
return result
end
-- ...
return self
end
Und ich laufe es durch:
local compressor = LZWCompression.new()
local encodedData = compressor:Encode("I like LZW, but it doesnt want to compress this text.")
print("Input length:",string.len(originalString))
print("Output length:",#encodedData)
local decodedString = compressor:Decode(encodedData)
print(decodedString)
print(originalString == decodedString)
Aber wenn ich es schließlich von lua ausführen, zeigt es, dass die Dolmetscher erwartete String nicht Tabelle. Das war komisch, weil ich ein Argument vom Typ string übergeben habe. Um zu testen, Lua Protokolle, schrieb ich an beggining der Funktion:
print(typeof(sInput))
Ich habe Ausgabe „Table“ und Lua Fehler. So, wie man es repariert? Warum zeigt Lua diese Zeichenfolge an (die ich übergeben habe) ist eine Tabelle? Ich benutze Lua 5.3.
bitte zeigen Sie etwas mehr Mühe, um das Problem beim nächsten Mal selbst zu lösen. "Warum funktioniert dieser Code nicht?" Fragen werden auf SO heruntergeregelt oder gelöscht. Außerdem kann ich Ihren Code nicht einfach ausführen, um zu sehen, was passiert, da Sie kein korrektes [MCVE] bereitstellen. Bitte lesen Sie [ask] – Piglet