こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Rubyのsuperclassメソッドについて

Rubyについての質問です。処理系は1.8.7です。

class Foo
def initialize(a)
@a = a
end
end
のようなクラスを作成し、そのインスタンスを
foo = Foo.new(1)
のように作成します。
このとき、
foo.superclassを呼び出すと
NoMethodError: undefined method `ancestors' for #<Foo:0x2b691220cc88 @a=1>
とエラーになります。

一方で
class FooExt < Foo
def initialize (a,b)
@b = b
super a
end
end
のようにFooを継承したクラスを作り、
fooext = FooExt.new(1,2)
fooext.superclass とすると
=> Foo
とsuperclassメソッドが動作します。

このsuperclassメソッドはどこで追加されたものなのでしょうか?

投稿日時 - 2012-04-08 00:44:23

QNo.7408976

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

勘違いでは?

superclassは、Classクラスのインスタンスメソッドなので、標準ではそれ以外のオブジェクトに対しては定義されていません。

なので、
fooext.superclass
=> undefined method `superclass' for #<FooExt:0x283220d0 @b=2, @a=1> (NoMethodError)

投稿日時 - 2012-04-08 07:59:48