問題タブ [eigenclass]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
302 参照

ruby - Rubyでのクラス定義について

最近、Ruby のクラスの詳細を調べていて、クラス定義に混乱していました。

Ruby では、クラス定義は次のようになります。

そしてそれはと同じです

それから私は混乱しました。最初のケースでは、self は現在使用中のオブジェクトへのポインターと見なすことができ、コンテキストの現在のクラスは A です。メソッドの検索は再帰的に行われます。しかし、私の質問は、defは何をするのでしょうか? 現在のオブジェクトとコンテキストをどのように変更しますか? 問題は2番目のケースでも同じです。class << selfのような記述は、現在のオブジェクトとコンテキストをどのように変更しますか?

そして別の質問です。私の知る限り、すべての Class オブジェクトは fly-weight のような設計パターンに従っています。それらは同じ Class オブジェクトを同じ定義で共有しているためです。その後、固有クラスが混乱しました。固有クラスの def は実際には Class オブジェクトでメソッドを定義しているため、「def self.*」とどのように関連付けることができるでしょうか。

見た目が複雑すぎて、Ruby の設計詳細が必要なのかもしれません。

0 投票する
2 に答える
589 参照

ruby - メタプログラミング:クラスメソッド内で定義されたインスタンスメソッドを呼び出すと、メソッドディスパッチはどこに表示されますか?

私はメタプログラミングRubyを読んでいて、次の言い換えられたコードについて何かを明らかにしたいと思っています。

Q1 私の最初の質問は、ファイルの最後にある2つのメソッド呼び出しに関するものです:my_class_method :foomy_class_method :bar。MyClazzオブジェクトがインスタンス化されると、両方が自動的に呼び出されると私は考えていますか?

Q2 Rubyがこれらのメソッド(def fooおよびdef bar)を生成すると、インスタンスメソッドであっても、MyClazzの固有クラスに配置されます。つまり、これは、Rubyが必要に応じてクラスメソッドとインスタンスメソッドの両方について固有クラスを参照することを意味しますか?

本の奥深くに移動する前に、それを明確にしたいだけです。

0 投票する
1 に答える
2975 参照

ruby - プライベート シングルトン メソッドを見つける方法

Vehicle私はそのようなモジュールを定義しました

Vehicle.singleton_methodsreturnへの呼び出し[:build]

によって定義されたすべてのプライベート シングルトン メソッドを調べるにはどうすればよいVehicleですか?

0 投票する
1 に答える
2296 参照

ruby - クラスとRubyのそのクラスのシングルトンの違いは何ですか?

さて、Ruby でメタプログラミングをしようとしていますが、少し混乱しています。私が読んだいくつかの記事 (この記事など) によると、Ruby クラスにクラス メソッドを動的に追加するには、クラスのシングルトン クラスを使用する必要があります。

これはなぜですか、それはこれとどのように違うのですか?

(この質問に誤った仮定が含まれている場合は申し訳ありません。私が言ったように、私は少し混乱しています。)

0 投票する
3 に答える
232 参照

ruby - クラスが固有クラスであるかどうかを知る

some_classクラスがオブジェクトの固有クラスであるかどうかを判断する最良の方法は何ですか?

0 投票する
1 に答える
949 参照

ruby-on-rails - ActiveSupport::クラスメソッドのコールバック

ActiveSupport::Callbacksクラスメソッドで使用することは可能ですか?具体的には、以下のモジュールで、同じ状態include ActiveSupport::Callbacksを作成define_callbacksしてrun_callbacks共有するためにどこに配置しますか?

アップデート

可能であれば、私にはわかりませんが、それは確かActiveSupport::Callbacksに設計されたものではありません。でステートレスインスタンスオブジェクトを作成するのが最適#handleです。

0 投票する
2 に答える
182 参照

ruby - 暗黙のコンテキストと固有クラス

私は最近、Ruby の暗黙的コンテキストに関する興味深い記事を見つけました。selfRuby は(デフォルトのメソッド receiver ) だけでなく、現在のクラス(デフォルトの defineeまたはとも呼ばれます)への参照も保持していることを理解しました`klass'

記事から、定義が現在のクラスclassの両方selfを定義されているクラスに設定すると仮定するのは正しいはずです。通常のメソッド定義 (つまり、シングルトン メソッドを定義するためにドット構文を使用しない)を考慮する限り、 を使用したメソッド定義のコンテキストでは、受信オブジェクトを参照し、現在のクラスは変更されません。defself

定義にドット構文を考慮しないことが安全だと考える理由は、Ruby がクラスの固有クラスを開く明示的な方法も提供しているからです。私が最も興味を持っているのは、固有クラスを開くときにこれら 2 つの暗黙のコンテキストがどのように管理されるかを理解することです。 .

def 固有クラスを開くためのよく知られた構文で使用します。

foo を のシングルトン メソッドAつまり固有クラスのインスタンス メソッド(be it A') として定義します。このコードは も出力#<Class:A>するので、<<構文がself現在のクラスの両方を に設定すると言うのは正しいA'ですか?

0 投票する
2 に答える
1162 参照

ruby - モジュールのシングルトンメソッドが、混合されるダウンストリームの固有クラスに表示されないのはなぜですか?

通常のメソッドルックアップパス、つまりを理解していますclass, superclass/module, all the way up to BasicObject。シングルトンバージョンのチェーンにも当てはまると思いましたが、メタチェーンにモジュールをミックスインした場合はそうではないようです。このモジュールをVehicleの固有クラスに含めたときに、次の例でシングルトンバージョンの代わりにAutomobileモジュールのメソッドが呼び出される理由を誰かが説明していただければ幸いです。banner

0 投票する
2 に答える
167 参照

ruby - 固有クラスのクラスメソッドを呼び出す

クラスの一部のインスタンスのクラスメソッドをオーバーライドする必要があります

固有クラスを明示的に取得せずにオーバーライドされたメソッドを呼び出す方法はありますか?

0 投票する
4 に答える
91 参照

ruby - Rubyで特定のシングルトン(または固有)クラスに対応するオブジェクトを取得するにはどうすればよいですか?

次のコードを想定します。

aから得る方法はありAsますか?