2011-10-22 113 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

相關問題