我正在 Lua 中为自定义数据包类型编写 Wireshark 解析器,包括 Lua 5.2 及更低版本(当前版本)的 Wireshark 版本包含 BitOp 库,而即将发布的版本将包含 Lua 5.3 或更高版本,并将使用内置的按位运算。
我的目标是让 Lua 版本自动处理这种转换,而不必更新每个版本的解析器。我当前的代码是:
local bit = nil
if tonumber(string.sub(_VERSION, 5)) < 5.3 then
bit = require("bit")
end
local version_byte = 0xaf
if bit then
print("BitOp method")
else
print((version_byte >> 4) * 10 + (version_byte & 0xf))
end
问题是 Lua 5.2(当然)无法识别按位移位和 & 运算符并抛出
unexpected symbol near '>'
。有没有办法有条件地评估这样的事情?
这是条件编译。当然可以。
if bit then
print("BitOp method")
else
load[[
-- arbitrary chunk of code
print((version_byte >> 4) * 10 + (version_byte & 0xf))
]]()
end