2011-10-22 114 views
3

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

比较metatables的常用方法不起作用,因为不同的套接字对象类型具有不同的metatables。 目前似乎没有在元表任何一致的值,以检查是(例如相同__tosting元方法)

所以说:怎么能知道他们是否有一个值是luasocket对象?

回答

1

既然你只想知道它是否是一个LuaSocket对象,所以你可以得到fd,为什么不看看对象是否有getfd()方法呢?作为奖励,这将适用于目前和未来的图书馆,而不仅仅是LuaSocket。

这种技术被称为'duck typing'

+0

我假设你可以检查文件metatable ;然后检查getfd方法;然后错误... – daurnimator

0

你没有。一般来说,你需要自己跟踪这类事情。你相信你所传递的对象是你期望的。如果你不确定,你总是可以使用pcall来调用它们的函数并捕获任何错误。

+0

我问,因为我想创建一个函数来获取传递给它的fd:使用lua文件对象,luasocket对象,libev对象,apr对象....并且我需要告诉它们之间的区别知道使用哪个例程。 – daurnimator

+0

@daurnimator:什么是“fd”? –

+0

文件描述符http://en.wikipedia.org/wiki/File_descriptor – daurnimator

相关问题