データを圧縮するための簡単なクラスを作成しました。ここでは、次のとおりです。単純なLZW圧縮は動作しません
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
と私はでそれを実行します。
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)
しかし、私は最終的にLUAで、それを実行すると、それはその通訳期待文字列ではなく、表を示しています。私はstring型の引数を渡すので、それは奇妙なことでした。ルアのログをテストするために、私は関数の先頭に書いた:
print(typeof(sInput))
"テーブル"とluaのエラーが出ました。どのようにそれを修正するには?なぜluaがその文字列(私が渡した)が表であることを表示するのですか?私はLua 5.3を使用しています。
次回は、問題を解決するためにさらに努力してください。 「なぜこのコードは機能しないのですか」という質問は、SOで下降または削除される傾向があります。また、コードを実行して、適切な[MCVE]を提供していないときに何が起こっているのかを確認することはできません。 [ask]をお読みください – Piglet