お世話になっております。
rubyのコーディングで疑問が発生しましたので、質問させてください。
以下の様にクラスを定義してあるとします
クラスA 体裁を整えて標準出力するクラス
・インスタンス変数@Aを持つ
・@Aを元に整形して標準出力する振る舞いを持つ
クラスB Aの子クラスで、標準出力する内容を細かく設定するクラス
・独自のインスタンス変数は持たない
・親クラスのインスタンス変数@Aを編集する振る舞いを持つ
上記の実装である時、クラスBの振る舞いでクラスAのインスタンス変数@Aを編集しようとした際にエラーが発生します。
尚、レシーバはsuperです。
エラー内容
./clsb.rb:49:in `edt_dsp': super: no superclass method `edt_dsp' (NoMethodE
rror)
エラー文中に出てる'edt_dsp'というメソッドが親クラスのインスタンス変数を編集するメソッドです。
尚、子クラスには独自の変数は無いのでinitializeメソッドは定義していません。
なぜこのようなエラーが発生してしまうのかわからず困っています。
現在自分でも色々とサイトを回って調べていますが、解決には至っていません。
ご回答いただければ幸いです。
以上です。よろしくお願いします。
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でも同様の記法でコンパイルが通ったので、出来るのかなとやってみた次第ですが、同様の動作は期待出来ないのでしょうか。
No.2ベストアンサー
- 回答日時:
インスタンス変数 @a は、インスタンス(オブジェクト)に付随したもので、祖先・子孫クラスでも共通です。
クラス定義Aの中で現れるインスタンス@aと、子クラス定義Bの中で現れるインスタンス変数@aが別物と誤解されているようですが、違います。同じオブジェクトであれば同じものです。
従って、@a でアクセスします。
ちなみに、super.a とかくと、「親の同名メソッドを呼び出して、その結果のオブジェクトのメソッドaを呼び出す」という文法上正当な表現ではありますが、やりたいこととは全く違います。
お世話になっております。
notnotさん、回答ありがとうございます。
教えていただいた事を踏まえてソースを整理して、
解決に至る事ができました。
ありがとうございました。
それから、前回補足投稿させていただいた中に、
コンパイラ云々と書いていましたが、IDEです。
インタプリタのRubyを使っているのに、頓珍漢な事を言って混乱させてしまっていたら、すみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ビーリアルのユーザー名を変え...
-
パソコンのスクリーンセーバー...
-
(再質問)エクセルのマクロボ...
-
英数字を含む文字列(0-9,A-Z)...
-
講義でわからないのですが以下...
-
文字コードのエラー
-
WinSCPで画像のように puttyを...
-
パイソンのクラスについて
-
教えてください
-
pythonエラー
-
Accessで文字列のバイト数読み込み
-
初心者プログラミング
-
VBScriptでExcel(2019)上のデー...
-
Ruby on railsをrails sで立ち...
-
C言語の入力した文字を反転させ...
-
エクセルvbaでチェックボックス...
-
プログラミング
-
WIN11にオフイスを複数入れるこ...
-
VBA
-
パイソンエラーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どういうプログラムで組みます...
-
関数の引数に複数のユーザ定義...
-
別のクラスのインスタンスの作り方
-
get() と find() の違いについて
-
パイソンのクラス
-
「arg」は何の略?
-
No route matches [GET] "/post...
-
A1の値をファイル名に指定した...
-
エクセルVBA オートフィルタで...
-
Rubyについて質問です
-
エラー「メソッドまたはデータ...
-
VBAで型が一致しないエラー(バ...
-
教えてください。vb5.0
-
Csvファイルの最終行を取得する...
-
クラス名やモジュール名の競合...
-
HSTLやSSTL等のI/Oピン
-
10円未満を切り捨てる方法は?
-
What class are you in? には何...
-
try ~ catch構文が使えない
-
【BrowseForFolderでデスクトッ...
おすすめ情報