CRuby 2.4から整数がIntegerに統合されるとともにその子クラスであるFixnumとBignumが廃止されたが、下記のようなコードを使えばそれを手軽に判定できる。
if 1.class.name == "Integer" # 統合後の処理 else # 統合前の処理 end
このようにバージョン番号を使わずに判定することで、JRubyなどの別実装で同様の変更がかかっても同じコードで対応できる。
ちなみにdefined?(Fixnum)
でも同じ判定ができるんだろうけど、
- Fixnumがなにがしかで引き続き定義されてたら期待通りに動かない
- 手軽に互換性を維持しようとして
class Fixnum < Integer; end
してるとか
- 手軽に互換性を維持しようとして
- Bignumが忘れられてるようでかわいそう
といったあたりが気になるので、今回のような判定方法のほうが個人的には好き。