Как узнать, является ли значение объектом luasocket? - PullRequest
3 голосов
/ 23 октября 2011

Я заметил, что luasocket, кажется, не предоставляет способ узнать, является ли значение объектом luasocket или нет.

Обычный подход сравнения метатаблей не работает, так как разные типы объектов сокетов имеют разные метатаблицы. Похоже, что в метатаблице нет согласованных значений для проверки (например, одинаковые __tosting метаметоды)

Итак: как можно узнать, является ли значение, которое они имеют, объектом luasocket?

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Поскольку вам нужно только знать, является ли это объектом LuaSocket, чтобы вы могли получить fd, почему бы просто не посмотреть, есть ли у объекта метод getfd ()?В качестве бонуса это будет работать с текущими и будущими библиотеками, которые предоставляют этот метод для объектов, а не только для LuaSocket.

Этот метод известен как 'duck typing' .

0 голосов
/ 23 октября 2011

Ты не.Как правило, вы должны сами отслеживать подобные вещи.Вы полагаете, что объекты, которые вы передаете, - это то, что вы ожидаете от них.И если вы не уверены, вы всегда можете использовать pcall для вызова функций и обнаружения любых ошибок.

...