質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1109閲覧

const_missingの挙動についてよく理解できない件

ShinjiAsai

総合スコア51

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/06/13 03:09

お世話になります。RUBY技術者認定試験合格教本のGold問題でよくわからない部分があったので、質問します。

###問題・解答・解説

問題

以下のコードを実行すると何が表示されますか?

Ruby

1class Object 2 X = "X" 3 def self.const_missing a 4 p "#{a}" 5 end 6end 7Y

解答

Ruby

1"Y"

解説

定数が見つからない場合、Moduleクラスのconst_missingが実行されます。このメソッドはオーバーライド可能です。
出題コードには定数Yは存在しません。Objectクラスにはconst_missingが定義されています。トップレベルはObjectクラスなので、Objectクラスに定義されたconst_missingが実行され、Yが表示されます。

###わからなかった点、認識があっているか確認したい点

const_missingは定義されていない変数を参照したときに呼び出されることはわかりました。
あっているか確認したいのですが、Xは定義されている変数であるため、その中でconst_missingを呼ぶと、結局はconst_missingは呼ばれないと言う認識で合っていますでしょうか?
一方でYは定数として定義されていないため、classの外であるトップレベルはObjectクラスのconst_missingが呼ばれると言うことでしょうか?
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Xは定義されている変数であるため、その中でconst_missingを呼ぶと

「その中で」とはどういう意味でしょうか。Xconst_missingは無関係かと思います。

Yは定数として定義されていないため、classの外であるトップレベルはObjectクラスのconst_missingが呼ばれると言うことでしょうか?

はい。

投稿2020/06/13 03:15

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShinjiAsai

2020/06/13 06:02

ご回答ありがとうございます。大変失礼しました。「その中で」と言う抽象的な言葉を使ってしまいました。私が意図していたその中でと言う意味は「メソッドとして」と言う意味でした。 理解できなかった部分として、なぜメソッドとして定義されているself.const_missingが実行されないのかと言うことです。 それはX=”X”と言う形で定数が定義されているために、self.const_missingが実行されないと言う認識であっているか?と言うことを確認させていただきたかった次第です。 正確に意図をお伝えできているか不安ですが、よろしくお願いします。
maisumakun

2020/06/13 06:28

const_missingは、未定義の定数を「参照」した場合に呼ばれます。代入は無関係です。
ShinjiAsai

2020/06/13 06:54

早速のご返信、ありがとうございます。丁寧にご説明いただいたことで、自分なりに理解できました。いつもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問