2017-03-14 4 views

答えて

3

一定の検索アルゴリズムは、に簡略化することができる:だから継承

によって字句「外側」

  • 「上向き」

    1. 、それは最初に最も近い字句に定数を見つけようとしますモジュール/クラス定義を囲み、次にそのモジュール定義の字句的に囲むモジュール定義などを含む。そこに定数が見つからない場合は、のみです。それは継承チェーンを見ています。

      matzがこのアルゴリズムの正式な正当性を提供したことはありませんでしたが、このアルゴリズムはNewspeakのメソッド解決アルゴリズムに似ています.Gilad Brachaは以下の正当性を示しました。あなたの目の前で値がの字句的に囲んでいる文脈でを持っていれば、それがシステムのまったく異なる部分から他の値を選んだのは驚くべきことです。

      CONSTANT代入は文字通りメソッド定義のすぐ上にありますが、目の前に割り当てられている値を受け取っていない場合は、そのメソッドの作成者にとって驚くことでしょう。

      self::CONSTANTの場合は、::スコープ解決演算子を使用して、ルックアップの開始点を明示的に指定して字句検索部分をスキップします。

      注:残念ながら、一定の検索はではなく、実際には単純です。悲しいことに、私はそれの良い記述を知らない。彼女の有名な"Three Implicit Contexts"の記事では、yuguiは時間がなくなり、後の記事で一定の検索を説明すると書いたが、残念ながら、彼女は決してしなかった。

  • 3

    あなたはChildクラスにdo_the_thingメソッドを呼び出すと、selfChildので、self::CONSTANTChild::CONSTANT( '子')です。

    あなたはParentクラスにdo_the_thingメソッドを呼び出すと、selfParentので、self::CONSTANTParent::CONSTANT( '親')です。あなただけのCONSTANTを呼び出すとき

    しかし、Rubyはまずdo_the_thing方法が配置されている場所で、この定数を見つけようと、それは両方のケースのためにParentクラスです。

    関連する問題