2011-10-22 4 views
3

luasocketは、値がルアソケットオブジェクトであるかどうかを知る方法を提供していないようです。値がluasocketオブジェクトかどうかを知るには?

メタオブジェクトを比較する通常の方法は、異なるソケットオブジェクトタイプが異なるメタテーブルを持つため機能しません。 メタテーブルに一貫性のある値がないように見えることはありません(たとえば、同じ__tostingメタメソッド)

したがって、それらの値がルアソケットオブジェクトであるかどうかをどのように知ることができますか?

答えて

1

LuaSocketオブジェクトであるかどうかを知りたいので、fdを得ることができるだけで、オブジェクトにgetfd()メソッドがあるかどうかを調べるのはなぜですか?ボーナスとして、これはLuaSocketだけでなく、このメソッドをオブジェクトに提供する現在のライブラリと将来のライブラリでも動作します。

この手法は、'duck typing'として知られています。

+0

私はあなたがファイルmetatable ; getfdメソッドをチェックします。その後、エラー... – daurnimator

0

あなたはしていません。一般的に、あなたはそのようなことを自分で追跡することが期待されます。渡されたオブジェクトは、期待しているオブジェクトであると信じています。また、わからない場合は、いつでもpcallを使用して関数の呼び出しを行い、エラーをキャッチすることができます。

+0

luaファイルオブジェクト、luasocketオブジェクト、libevオブジェクト、aprオブジェクトを取ります。それらの違いを伝える必要があります。何かのfdを取得する関数を作成したいと思います。どのルーチンを使用するかを知る。 – daurnimator

+0

@daurnimator: "fd"とは何ですか? –

+0

ファイル記述子http://en.wikipedia.org/wiki/File_descriptor – daurnimator

関連する問題