Модуль:Recursive concat

Материал из свободной русской энциклопедии «Традиция»
Перейти к навигации Перейти к поиску

Для документации этого модуля может быть создана страница Модуль:Recursive concat/doc

local function wrap (tbl, separator)
	local default_separator = separator
	local concat = table.concat
	local function serialise (value)
		if type (value) ~= 'table' then
			return tostring (value)
		end
		local separator = value.separator or default_separator
		local serialised = {}
		for i, val in ipairs (value) do
			serialised [i] = serialise (val)
		end
		return concat (serialised, separator)
	end

	return setmetatable (tbl, {
		__tostring = function (value)
			return serialise (value)
		end
	})
end

local tbl = {
	'A', 'B', 'C', 'D', separator = '; ',
	{ 'e', 'f', 'g', 'h' },
	'I'
}

return {
	test = function (frame)
		return tostring (wrap (tbl, ', '))
	end
}