[ruby-list:50329] 1 は Integer のインスタンスですか

From: "5.5" <5.5@...>
Date: 2016-05-15 23:10:00 UTC
List: ruby-list #50329
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

In This Thread

Prev Next