2017-10-31 8 views
0

ここで、オートローディングがトリガーされ、Constantを現在のネストスコープ内に配置できない場合、const_missingから救助することが重要であると理解しています。私はまた、ファイル名が欠落している定数と同じ名前のオートローディングプロセスでおそらく見過ごされたファイルを必要とすることを使命と理解しています。この場合、const_missingの目的を説明できる人はいますか?

しかし、私を混乱させるものがいくつかあります。まず、@looked_for ||= {}私が間違っていなければ@looked_for || @looked_for = {}と言っています。私たちが@looked_forがnilであることを考慮して、なぜ彼らはそこに配置することに決めましたか?私たちはそのインスタンス変数を作成しているだけです。空であることを知っているので、なぜ@looked_for = {}と言うのでしょうか?

また、それはif @looked_for[str_name]と言いますが、私たちが今作成している場合、@looked_forハッシュが既存のキーを持っている可能性はありますか?それは無しではありませんか?さらに、関数の残りの部分がそのifステートメントの下にあるため、@looked_forが空の場合は何も起こりません。

この@looked_for変数が何らかの形で既に存在し、定数名のキーを持っていた場合、@looked_for [str_name]なぜそれを1に設定していますか?それの目的は何ですか?

+0

[|| =(or-equals)はRubyでどういう意味ですか?](https://stackoverflow.com/questions/995593/what-does-or-equals-mean-in-ruby) – jonrsharpe

+0

私の質問の主な違反は、@looked_for [str_name] = 1を設定する目的は何でしょうか。 – rackymortor

+2

このメソッドが複数回呼び出される可能性があります。私たちは** "notlooked_for is not nill"をまったく知りません。最初の呼び出しを除いて*は*なりません。 – meagar

答えて

0

私たちが@looked_forがnilであることを知っているので、なぜ彼らはそこに配置することにしましたか?

わかりません。すでに価値があるかもしれません。クラスオブジェクトのインスタンス変数です。そして、クラスは長い間生きています。

私の質問の主な副は次のようになりますが、我々はすでにそれを試してみましたが、見つけられませんでしたので、(同じパラメータで短絡するconst_missingの後続の呼び出しを@looked_for[str_name] = 1

を設定する目的は何ですマッチング定数)。これは、const_missingの呼び出しの間に@looked_forが続くので、これも可能です。

+0

それはあなたがプレースホルダとして任意の値を使用することができるという意味ですか? – rackymortor

+0

@rackymortorはい、どんなtruthy値 –

+0

今、私は誤って 'if'ステートメントの看板を見落としました。私は 'if'のすべてのロジックが後に来ると思ったが、この場合' if'ステートメントはインラインであったので、前にステートメントを参照していた。 – rackymortor

関連する問題