- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:子クラスのインスタンスから親クラスのインスタンス変数の内容を表示する親クラスのメソッドを叩きたい)
子クラスから親クラスのインスタンス変数を編集するメソッドでエラーが発生する理由
このQ&Aのポイント
- Rubyのコーディングで、子クラスから親クラスのインスタンス変数を編集するメソッドを呼び出すと、エラーが発生します。
- クラスAとクラスBの関係で、エラーメッセージに表示される'edt_dsp'メソッドは、親クラスのインスタンス変数を編集するメソッドです。
- 親クラスのインスタンス変数を編集するメソッドは、子クラスから呼び出すことができません。このエラーは、親クラスに編集用のメソッドがないことを示しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
インスタンス変数 @a は、インスタンス(オブジェクト)に付随したもので、祖先・子孫クラスでも共通です。 クラス定義Aの中で現れるインスタンス@aと、子クラス定義Bの中で現れるインスタンス変数@aが別物と誤解されているようですが、違います。同じオブジェクトであれば同じものです。 従って、@a でアクセスします。 ちなみに、super.a とかくと、「親の同名メソッドを呼び出して、その結果のオブジェクトのメソッドaを呼び出す」という文法上正当な表現ではありますが、やりたいこととは全く違います。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10359)
回答No.1
>尚、レシーバはsuperです。 これが引っかかりますね。super とは、親クラスの同名のメソッドを呼び出すキーワードなので、「レシーバはsuperです」は意味不明の文章です。 >./clsb.rb:49:in `edt_dsp': super: no superclass method `edt_dsp' (NoMethodE rror) というのは、「クラスBのメソッドedt_dspの中で、superと書かれていたので親クラスの同名メソッドを呼び出そうとしたが、親クラスAではメソッドedt_dspは定義されていない」というエラーですね。 実際、定義されて無さそうなので、superと書いたのが間違いでは?何をしたくてsuperと書いたのですか?
質問者
補足
お世話になっております。 JAVA等では子から親に定義されているメンバ変数aにアクセスする際は、 super.aと記述した様に記憶しています。 rubyでも同様の記法でコンパイルが通ったので、出来るのかなとやってみた次第ですが、同様の動作は期待出来ないのでしょうか。
お礼
お世話になっております。 notnotさん、回答ありがとうございます。 教えていただいた事を踏まえてソースを整理して、 解決に至る事ができました。 ありがとうございました。 それから、前回補足投稿させていただいた中に、 コンパイラ云々と書いていましたが、IDEです。 インタプリタのRubyを使っているのに、頓珍漢な事を言って混乱させてしまっていたら、すみません。