-1

BasicObject, Object, and Kernel相互にどのように相互作用するかを理解するために、David A Black の本の100 ページにある以下のコードについて考えました。

class BasicObject
# a scant seven method definitions go here
end
module Kernel
# over 100 method definitions go here!
end
class Object < BasicObject
# one or two private methods go here,
# but the main point is to mix in the Kernel module
include Kernel
end

Object は BasicObject のサブクラスです。明示的なスーパークラスを持たないすべてのクラスは、Object のサブクラスです。このデフォルトの証拠は、irb で確認できます。

class C
end
#=>nil
C.superclass
#=>Object

わかりましたが、 David Black の著書にある以下の太字の行は、私を混乱させて理解できませんでした。

「すべてのクラスには Object があり、したがって Kernel とBasicObject- がその先祖の中にあります。もちろん、 であり、 であり、 であるというパラドックスがあります。しかし、前に見たように、クラス モデルのわずかな循環性がジャンプに役立ちます。 -ヒエラルキーを開始し、いったん動き出すと、それは論理的かつクリーンに機能します。」BasicObjectObjectObjectClassClassObject

ここに私の質問があります:

  1. なぜ彼は関係をパラドックスとして 言及したBasicObjectObjectですObjectか?ClassClassObject
  2. 彼はここで何circularityを言おうとしているのですか?
4

1 に答える 1

3

「のインスタンス」と「のサブクラス」という「is」の2つの意味を混同しています。

1) サブクラス関係について:

  • ClassのサブクラスですModule
  • ModuleのサブクラスですObject
  • ObjectのサブクラスですBasicObject

また、推移性により、はおよび のClassサブクラスであり、は のサブクラスです。しかし、ここには循環性はありません。たとえば、 、、またはのサブクラスではありません。ObjectBasicObjectModuleBasicObjectBasicObjectClassModuleObject

2) インスタンス化関係について:

  • ClassのインスタンスClass(および (種類) のModule, Object, BasicObject) です。
  • ModuleのインスタンスClass(および (種類) のModule, Object, BasicObject) です。
  • ObjectのインスタンスClass(および (種類) のModule, Object, BasicObject) です。
  • BasicObjectのインスタンスClass(および (種類) のModule, Object, BasicObject) です。

しかし、インスタンス化関係に循環性はありません。循環性は、推移的な関係で定義された概念です。例えば、もしA → Bとなら、推移性によりB → Cそれに従い、もしそうなら、循環性があります。しかし、インスタンス化関係は推移的ではありません。「A は B のインスタンスである」および「B は C のインスタンスである」は、「A は C のインスタンスである」という意味ではありません。したがって、循環性は、インスタンス化関係で自明でない方法で定義することはできません。A → CC → A

于 2013-02-23T09:33:42.893 に答える