如何判断一个值是否为 luasocket 对象?

我注意到 luasocket 似乎没有提供一种方法来知道一个值是否是 luasocket 的对象。

通常的方法是比较元表,但是不同的 socket 对象类型有不同的元表,因此这种方法无效。 在元表中也似乎没有任何一致的值可以进行检查(例如,相同的 __tosting 元方法)。

那么,如何知道一个值是否是 luasocket 对象呢?

原文链接 https://stackoverflow.com/questions/7863431

点赞
stackoverflow用户734069
stackoverflow用户734069

你不需要。一般来讲,你需要自己追踪那些东西。你会相信传递给你的对象是符合你期望的。如果你不确定,你可以使用 pcall 来调用函数并捕获任何错误。

2011-10-23 02:53:52
stackoverflow用户15996
stackoverflow用户15996

你只需要知道是否为 LuaSocket 对象以便获取 fd,为什么不直接查看对象是否有 getfd() 方法呢?作为额外的奖励,这将能够与当前和未来提供此方法的库一起使用,而不仅仅是 LuaSocket。

这种技术被称为 '鸭子类型'

2011-10-23 18:47:55