lua-users home
lua-l archive

Re: Most efficient way to recognize a line by its first (up to) three characters

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On 11/03/2014 19.13, Luiz Henrique de Figueiredo wrote:
Consider this scheme instead of a chain of ifs:
local handlers={
	["abc"]=function (prefix,info) ... end,
	["123"]=function (prefix,info) ... end,
}
local badprefix=function (prefix,info) error("cannot handle "..prefix) end
while true do
	local prefix, info = line:sub(1,3), line:sub(4)
	local h = handlers[prefix] or badprefix
	h(prefix,info)
end
In case the embedded system could not tolerate many string allocations, an alternative could be to build an integer out of the numeric value of the first three characters, such as (untested):
 local a, b, c = string.byte(s, 1, 3)
 local id = (65536 * a) + (256 * b) + c
then use 'id' as index in a table, or for direct comparison.
--
 Enrico

AltStyle によって変換されたページ (->オリジナル) /