Содержимое этих типов — нет. Луа не может просто так, без костылей взять, и преобразовать функцию обратно в строку. Можно в байткод, но не в текст. Вместо значения, будет отображаться что-то типа function 0x12345 Юзердата — на то и юзердата, это сишный тип. Сишка не умеет в интроспекцию. Будет отображено userdata 0x12345 или cdata 0x12345. Потоки в луа, то есть корутины, это почти те же функции, соответственно, будет отображено то, как был создан "поток": если через coroutine.create — thread 0x12345, если coroutine.wrap — function 0x12345, потому что wrap - это функция обёрнутая вокруг корутины. Если у объекта или юзердаты есть метод tostring — оно будет вызвано либой inspect, но это можно убрать. Но вывод таблиц — запросто, и это очень удобно для начинающих и не только.
Обсуждают сегодня