[ruby-list:50330] Re: 1 は Integer のインスタンスですか
From:
"H.Hiro" <main@...>
Date:
2016-05-17 17:07:01 UTC
List:
ruby-list #50330
H.Hiroです。 この場合、FixNumがIntegerのサブクラスということになります。 私としては、 inst.is_a?(Integer) は「instがIntegerのインスタンスそのものではないが、Integerが持つべき機能は持ち合わせている」、inst.instance_of?(Integer)は「instを実際に作り上げたクラスはIntegerである」、という認識をしています。 「整数を表すインスタンスであるか」(Fixnum, Bignum問わず)であれば inst.is_a?(Integer) とすればよい、というところでしょうか。 ちなみに、 http://docs.ruby-lang.org/ja/2.2.0/class/Integer.html にもありますが、Integerは抽象クラス(それ自身からはインスタンスが生成されず、継承された先からのみ生成される)であるので、いかなるRubyのオブジェクトについても inst.instance_of?(Integer) が真になることはないはずです(たぶん)。 2016年5月16日 8:10 5.5 <5.5@moji.gr.jp>: > 5.5 です。 > (既出だったかどうか覚えがないのですが) > > 1 って Integer のインスタンスなんでしょうか? > > お尋ねしたいのは Ruby の動作や仕様ではなく単なる用語の問題です。 > Ruby では「インスタンス」をどういう意味で使っているかという。 > > instance_of? の動作は以下のようになっています。 > > 1.instance_of?(Fixnum) #=> true > 1.instance_of?(Integer) #=> false > > メソッド名からすると,1 は Integer のインスタンスと呼ばないよ > うに思えます。 > > しかしリファレンスマニュアルの Object#instance_of? のページ > http://docs.ruby-lang.org/ja/2.3.0/method/Object/i/instance_of=3f.html > には, > > オブジェクトがクラス klass の直接のインスタンスである時 > 真を返します。 > > と書かれています。 > 「直接の」という表現が使われているので,当然「直接ではない」場 > 合があると想定されます。 > このことから > 「1 は,直接にではないが,Integer のインスタンスである」と言え > るのだろう,と思いました。 > > ところが,「Object#is_a?」のページ > http://docs.ruby-lang.org/ja/2.3.0/method/Object/i/kind_of=3f.html > を見ると, > > オブジェクトが指定されたクラス mod かそのサブクラスのイン > スタンスであるとき真を返します。 > > とあります。 > この表現からは,「1 は Integer のサブクラスのインスタンスでは > あるが,Integer のインスタンスではない」のだろうと推察されます。 > > どっちなんでしょうか。 > > クラスの継承関係を分類理論などの「カテゴリー」の類比で捉えると, > 直接だろうが間接だろうがインスタンスであると呼ぶほうが自然な気 > がするのですが。 > > > ちなみに「Ruby 用語集」 > http://docs.ruby-lang.org/ja/2.3.0/doc/glossary.html > の「インスタンス」を見ると, > > オブジェクトのこと。オブジェクトがあるクラスに所属するこ > とを強調する意味あいがあるらしい。オブジェクトなんだかイ > ンスタンスなんだか混乱してオブジェクト指向に挫折する人は > 多いと聞く。 > > となっていて,解決になりませんでした。 > > -- > 5.5@moji.gr.jp -- H.Hiro / Maraigue http://hhiro.net/about/ main@hhiro.net