2013-03-02 6 views
12

Я использую inspect.lua для проверки таблицы на строку.Как проверить userdata в lua

Но, если значение в UserData, он возвращает только <userdata 1>

мне действительно нужно знать, что тип UserData является то, что значение UserData есть, это очень важно для отладки, я не хочу делать это в любой среде IDE, я просто хочу, чтобы что-то могло помочь мне отлаживать сотрудники печати.

+5

Единственная информация, которую вы можете получить, - это 'getmetatable (someuserdata)'. Что именно вы хотите проверить? – Eric

+1

Большое спасибо, есть что-то очень полезное, 'print (проверка (getmetatable (someuserdata)))' –

+0

где «someuserdata» - это что именно ?. И что же именно возвращает возвращаемое значение getmetatable? Руководство бесполезно. – CashCow

ответ

7

Вы не можете.

От manual:

Тип UserData обеспечивается, чтобы позволить произвольные данные C, чтобы быть сохранены в переменных Lua. Значение userdata является указателем на блок необработанной памяти. [...] Пользовательские данные не имеют предопределенных операций в Lua, за исключением назначения и проверки подлинности.

Как указано @Eric, единственное, что вы можете сделать из Lua является инспектировать метатаблицу:

print(inspect(getmetatable(someuserdata))) 

Если вы используете C API, вы должны быть в состоянии зарегистрировать пользовательскую функцию, которая печатает все, что удерживается блоком.

+1

и тест на идентичность? – CashCow

+0

@CashCow: Тест идентичности ==. То есть выражение (someuserdata == someuserdata) возвращает true, в моем, по общему признанию, ограниченном тесте. Похоже, ~ = также работает. – solublefish

Смежные вопросы