私が探しているものの例として Python を使用します (Python を知らない場合は、疑似コードとして考えることができます)。
>>> a = 1
>>> type(a)
<type 'int'>
Ruby では次のことができるとわかっています:
1.9.3p194 :002 > 1.class
=> Fixnum
しかし、これはオブジェクトのタイプを判別する適切な方法でしょうか?
ベストアンサー1
Ruby の世界では曖昧な用語であるオブジェクトの「型」を決定する適切な方法は、 を呼び出すことですobject.class
。
クラスは他のクラスから継承できるため、オブジェクトが「特定の型」であるかどうかを判断したい場合は、を呼び出して、その型であるobject.is_a?(ClassName)
か、またはその型から派生したものであるかどうかを確認することができます。object
ClassName
通常、Rubyでは型チェックは行われませんが、代わりにオブジェクトは特定のメソッドに応答する能力に基づいて評価されます。これは一般に「ダックタイピングつまり、自分が望むメソッドに反応してくれるのであれば、型にこだわる必要はないのです。
たとえば、object.is_a?(String)
は厳格すぎます。別のクラスがそれを文字列に変換するメソッドを実装したり、String と同じように動作させたりする可能性があります。は、object.respond_to?(:to_s)
問題のオブジェクトが目的どおりに動作するかどうかをテストするより良い方法です。