ホームページ > バックエンド開発 > Python チュートリアル > Rubyメタプログラミング基礎学習ノート集

Rubyメタプログラミング基礎学習ノート集

WBOY
リリース: 2016-07-22 08:56:30
オリジナル
1357 人が閲覧しました

注1:
コードには変数、クラス、メソッドが含まれており、これらを総称して言語構造と呼びます。

リーリー

概要:
インスタンス メソッドはクラスから継承され、インスタンス変数はオブジェクト自体に存在します。
クラスとオブジェクトはどちらも Ruby のファーストクラスの値です。

応用例:

リーリー

個別に出力

リーリー

注2: 動的通話
メソッドを呼び出すと、実際にはオブジェクトにメッセージが送信されます。

リーリー

結果:

リーリー

ドット表記の代わりに object#send() を使用して、MyClass#my_method() メソッドを呼び出すことができます。

リーリー
send() メソッドの最初のパラメータは、オブジェクトに送信されるメッセージであり、シンボル (:symbol) または文字列にすることができます。他のパラメータは呼び出し元のメソッドに直接渡されます。

どのメソッドを呼び出すかを動的に決定できる技術をDynamic Dispatchと呼びます。

注 3: シンボルと文字列の違い
1. シンボルは不変であり、文字列内の文字は変更できます。
2. シンボルに対する操作が高速化されます。
3. 通常、物の名前を表すには記号が使用されます。
例:

リーリー
動的ディスパッチでパターンディスパッチメソッドを使用します。


リーリー

注4: 動的定義
Module#define_method() メソッドを使用してメソッドを定義します。

リーリー

結果: 30<font face="Courier New"></font> <br>

シングルトン メソッドを使用すると、単一のオブジェクトにメソッドを追加できます。シングルトンメソッド


リーリー
結果:


リーリー

注5:
クラスメソッドの本質は、クラスがオブジェクトであり、クラス名が定数であるということです。クラスのメソッドを呼び出すことは、オブジェクトのメソッドを呼び出すことと同じです:

リーリー
ダックタイピング: オブジェクトがメソッド (通常のメソッドまたはシングルトン メソッド) に応答できるかどうか。

クラス メソッドの本質は、クラスのシングルトン メソッドであるということです。

リーリー
obj には、オブジェクト参照、定数クラス名、または self を指定できます。

クラスマクロ
Ruby オブジェクトには属性がありません。属性は模倣メソッドを使用して定義できます。
アクセサーを定義する Module#attr_*() メソッドのメンバー。マクロはキーワードではなくメソッドです。

固有クラス
シングルトンメソッドは、従来のメソッドに従って、祖先チェーンの中で保存できない場所を探します。obj は保存できないオブジェクトであり、それ以外の場合は、すべてのインスタンスでこのメソッドを共有できます。
オブジェクトには、オブジェクトの固有クラスと呼ばれる固有の非表示クラスがあります。
eigenclass スコープを入力してください:

リーリー
eigenclass への参照を取得したい場合は、スコープを離れるときに self を返すことができます:

付録:
クラス変数、インスタンス変数、クラスメソッド、インスタンスメソッドの違い
@@ _ @ self(?clas,::).method : クラスメソッド
メソッド : インスタンスメソッド


リーリー

結果:
リーリー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート