我注意到 luasocket 似乎没有提供一种方法来知道一个值是否是一个 luasocket 对象。
比较元表的常用方法不起作用,因为不同的套接字对象类型具有不同的元表。元表中似乎没有任何一致的值可以检查(例如,相同的__tosting
元方法)
那么:如何知道他们拥有的值是否是 luasocket 对象?
既然你只想知道它是否是一个 LuaSocket 对象,那么你就可以得到 fd,为什么不看看这个对象是否有一个 getfd() 方法呢?作为奖励,这将适用于在对象上提供此方法的当前和未来的库,而不仅仅是 LuaSocket。
这种技术被称为“鸭子打字”。
你没有。通常,您应该自己跟踪这类事情。您相信您传递的对象是您所期望的。如果您不确定,您可以随时使用pcall
它们调用函数并捕获任何错误。