1. ホーム
  2. ruby

[解決済み] Rubyでオブジェクトの型を決定する

2022-03-22 07:22:06

質問

Pythonを例にして説明します(Pythonを知らない人は擬似コードと思えばいいでしょう)。

>>> a = 1
>>> type(a)
<type 'int'>

私は、rubyでできることを知っています。

1.9.3p194 :002 > 1.class
 => Fixnum 

しかし、これはオブジェクトのタイプを決定する適切な方法なのでしょうか?

どのように解決するのですか?

オブジェクトの "type" を決定する正しい方法は、Ruby の世界ではふらふらした用語である。 object.class .

クラスは他のクラスを継承することができるので、あるオブジェクトが特定の型であるかどうかを判断したい場合は object.is_a?(ClassName) を確認するために object が型である場合 ClassName またはそれに由来する。

通常、Rubyでは型チェックは行わず、一般に"と呼ばれる特定のメソッドに対応できるかどうかでオブジェクトを評価します。 アヒルの型付け となります。つまり、欲しいメソッドに反応するのであれば、型にこだわる必要はないのです。

例えば object.is_a?(String) というのも、他のクラスがこれを文字列に変換するメソッドを実装したり、 String の挙動と同じように動作させるかもしれないからです。 object.respond_to?(:to_s) は、問題のオブジェクトがあなたの望むことを行うかどうかをテストする、より良い方法です。