問題タブ [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 に答える
44 参照

ruby - main でメソッドを定義すると、Object と main.singleton_class の両方で定義されるのはなぜですか?

定義がトップレベルで実行され、結果が驚くべきものである場合、Ruby でメソッドが定義されている場所を確認するためにチェックしていました。

foo同時に2つのクラスで定義されているようです! 説明はありますか?

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

ruby - Rubyで継承はどのように機能しますか?

Dave Thomas によるRuby オブジェクト モデルの講演で、Rubyには「クラス メソッド」はありません。メソッドの受け手が「クラスオブジェクト」か「インスタンスオブジェクト」かの違いだけです。

デフォルトでは、ancestorsメソッドはメタクラスを表示しません:

ただし、実際のものは次のようになると思います。

今、継承。

以下は、 の新しい固有クラスを作成しますB

  1. 固有クラスも含まれている場合、 と はどのように見えるB.ancestorsでしょうか? B.metaclass.ancestorsメソッドsay_helloは固有クラスに格納されていますが (B.class継承元であると想定しています)、それはどこにあるのでしょうか?

  2. 2 つの祖先チェーン (B.ancestorsおよびB.class.ancestorsまたはB.metaclass.ancestors) があるため、継承は実際にどのように行われるのでしょうか?

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

ruby - Ruby - 固有クラスのインスタンスを取得する方法はありますか?

各固有クラスにはインスタンスが 1 つしかないため、固有クラスのインスタンスを取得する方法を探しています。

ObjectSpace を調べて各固有クラスをテストすることもできますが、費用がかかると思います。

不思議なことに、一致をテストするには、各オブジェクトの固有クラスを取得する必要がありますis_a?

クラス (または固有クラス) のインスタンスを取得するClass#instanceorメソッドがあればいいのにと思います。Class#instances

最も直接的な方法は、固有クラスからインスタンスを抽出するinspectことですが、それを信頼できるかどうか疑問に思っています。

私のユースケースは、クラスメソッドのクラスを取得する必要があるということですがMethod#owner、固有クラスが提供さMethod#receiverれ、現在のレシーバーが提供されます。

何か案は?

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

ruby - Ruby 1.8 vs. 1.9: Ruby シングルトン クラスが別のクラスのサブクラスかどうかを判断する

前の質問への回答で述べたようにB < A、クラスが別のクラスのサブクラスであるかどうかを判断する最も簡単な方法です。ただし、Ruby 1.8 (REE 1.8 も同様)Bがシングルトン クラス (つまり、eigenclass) の場合、これは失敗するようです。説明する:

ご覧のとおり、シングルトン クラス ( )Aの祖先としてリストされていますが、Ruby 1.8ではサブクラスかどうかを確認すると返されます(ただし、1.9 では正しく返されます)。チェーンをたどると、これが当てはまる理由がわかります。class << b; self; endfalseAtrue#superclass

これがたまたま 1.9 で修正された 1.8 のバグなのか、それとも 1.9 で意図的に変更された予想される動作なのか、誰にもわかりませんか? この問題に関する言及やドキュメントを他の場所で見つけようとしましたが、何も見つかりませんでした。

そして、この問題のために、シングルトン クラスがRuby 1.8のサブクラスであることを確認する最良の方法をA誰か知っていますか? (class << b; self; end).ancestors.include?(A)祖先のリストには含まれているモジュールも含まれているため、技術的には「正しい」わけではありませんが、回避策として行ってきました。

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

ruby - include によるクラス メソッドの追加

クラス メソッドとインスタンス メソッドの両方を含めたい Ruby クラスがあります。hereで説明されているパターンに従って、現在次のものを使用しています。

モジュール内のすべてのメソッドが論理的に適合するため、2 つの別個のモジュール (1 つは組み込み、もう 1 つは拡張) を作成したくありません。一方、このパターンでは、a) 追加のClassMethodsモジュールを定義する必要があり、b) すべてのモジュールに対してボイラープレートself.includedメソッドを記述する必要があります。

これを行うより良い方法はありますか?

編集 1 : 別の方法を見つけましたが、これが最初の方法よりも優れているかどうかはわかりません。

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

ruby - クラス、モジュール、それらの固有クラス、およびメソッドルックアップ

Moduleクラスを開いて、それにメソッドを追加しましょう。

これを行うことで、このメソッドを呼び出すことができます。

Classこれは、のクラスがでありClass、そのスーパークラスがであるため理解できModuleます。したがって、で定義されたインスタンスメソッドを呼び出すことができますModule

クラスとモジュールの関係

ここで、以下のメソッドはの固有クラスbarで定義されています。Module

でも今

また動作します。

誰かがの固有クラスのClassメソッドにアクセスする方法を教えてModuleもらえますか?


私は今それを手に入れたと思います。メソッドルックアップは、前に説明したようには機能しません。私がそうするときClass.foo、メソッドはClass's eigenclassで検索され、次に'eigenclassから'seigenclassまでのスーパークラスでありModuleBasicObjectその時点で(蛇が自分の尻尾を食べるように)自分自身をオンにしてClass('s eigenclassのスーパークラスと同様に)、次にそのスーパークラスClassに、メソッドが見つかります。BasicObjectModule

同様に、私が行うClass.barと、メソッドはClass's eigenclassで検索され、次にModule'seigenclassで検索されます。

私がする時

私が行うときの出力はwotだと思います:

これが私の現在の理解です: 現在の理解

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

ruby - Ruby クラス << クラス = Module::new

コード スニペットに次の構文がありますが、それが何をするのかわかりません。

まず、クラスまたはモジュールPushableModuleがファイル/プログラムに存在しません。次に、固有クラスを取得し、ブロックを定義する前にそれを等しく設定しているように見えますがModule::new、これはありません理解する。誰かが私にこれを説明してもらえますか(コードスニペットが実際に何をするのか)?

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

ruby - ruby いつから固有クラスが誕生するのか

オブジェクトまたはクラスでシングルトン メソッドが定義される前に固有クラスが存在しますか。つまり、シングルトンメソッドまたはクラスメソッドが定義されている場合、それらは常に存在しますか、または存在しますか?

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

ruby - 固有クラスを列挙できますか?

呼び出しObjectSpace.each_object(Class)ても固有クラスが返されないようです。たとえば、Ruby メタクラスを調査する場合: シングルトン メソッドを定義するときに 3 つあるのはなぜですか? ObjectSpace.count_objects[:T_CLASS]、クラスメソッドで新しいクラスを定義する場合、whileは 3 ずつインクリメントされていましたが、 ObjectSpace.each_object(Class).count1 だけインクリメントされていることがわかりました。

システムでアクティブな固有クラスを列挙する方法はありますか?