Альтернативный метод, который немного более краткий:
local fieldString = tostring(field)
local i, j = string.find(fieldString, ": .* myproto")
print(string.sub(fieldString, i + 2, j - (1 + string.len("myproto")))
РЕДАКТИРОВАТЬ : Или еще более простое решение, которое работает для любого протокола:
local fieldString = tostring(field)
local i, j = string.find(fieldString, ": .* ")
print(string.sub(fieldString, i + 2, j - 1))
Конечно, 2-й метод работает только до тех пор, пока в имени поля нет пробелов.Так как это не всегда так, первый метод более надежен.Вот 1-й метод, заключенный в функцию, которая должна использоваться любым диссектором:
-- The field is the field whose name you want to print.
-- The proto is the name of the relevant protocol
function printFieldName(field, protoStr)
local fieldString = tostring(field)
local i, j = string.find(fieldString, ": .* " .. protoStr)
print(string.sub(fieldString, i + 2, j - (1 + string.len(protoStr)))
end
... и здесь он используется:
printFieldName(myproto.fields.foo, "myproto")
printFieldName(someproto.fields.bar, "someproto")