Log In  


-- converts anything to string, even nested tables
function tostring(any)
	if type(any)=="function" then 
		return "function" 
	end
	if any==nil then 
		return "nil" 
	end
	if type(any)=="string" then
		return any
	end
	if type(any)=="boolean" then
		if any then return "true" end
		return "false"
	end
	if type(any)=="table" then
		local str = "{ "
		for k,v in pairs(any) do
			str=str..tostring(k).."->"..tostring(v).." "
		end
		return str.."}"
	end
	if type(any)=="number" then
		return ""..any
	end
	return "unkown" -- should never show
end

Example usage:

> print(""..tostring({true,x=7,{"nest"}}))
{ 1->true 2->{ 1->nest } x->7 }
11


nice! would be a great addition to the pico8 api. tables are a pain to debug.


I imagine a lot of us have made something similar. I have a ton of pretty-printing stuff. Lua's string-ifying isn't the greatest in the first place, and even then, Pico-8 doesn't provide its full facilities. Pretty inconvenient when you have to debug with print(). It'd be nice if there was better native support.


@Felice,ultrabrite I totally agree, debugging in pico-8 is hard and not being able to print whatever, makes it even harder. Would be cool if pico-8 did this natively.


It would be much simpler if the tostr() function just converted as table to a string of the table's values rather than just "[table]". I always have to make for loops in order to see what in a table is causing me issues.


2

Thank you for your code. While debugging I was looking for a function that would do the exact same thing.

I took your code and improved upon it.

-- converts anything to string, even nested tables
function tostring(any)
  if (type(any)~="table") return tostr(any)
  local str = "{"
  for k,v in pairs(any) do
    if (str~="{") str=str..","
    str=str..tostring(k).."="..tostring(v)
  end
  return str.."}"
end

This will print like this

> t = {5, {c="b"}, 'a', true}
> print(tostring(t))
{1=5,2={c=b},3=a,4=true}


[Please log in to post a comment]