問題タブ [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 投票する
3 に答える
270 参照

ruby - 固有クラスからクラスを決定する

Ruby では、クラスの固有クラスを取得するのは次のようにFoo単純です。

私は逆の操作に興味があります: 固有クラス自体から固有クラスの所有者を取得します:

固有クラスが の匿名サブクラスでClassあるため、これが可能かどうかはわかりFooません。そのため、継承階層のどこにも表示されません。固有クラスのメソッド リストを検査することも、心強いものではありません。eigenclass.name戻りますnil。これが可能であることを願っている唯一のこと:

明らかに、固有クラスがインスタンス化されるときにこの情報がハードコーディングされていても、固有クラスのto_sメソッドは所有者について何らかの情報を知っています。したがって、私が知っている唯一の方法はObject.const_getting、そのようなハックです

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

ruby - ruby クラスの固有クラスにインスタンスのデフォルトを設定する

これは、私がこれを達成するために管理した 1 つの方法です。

AThing のインターフェイスは、最終結果として私が望むものです。私が本当に嫌いなのは、@stuff = self.class.stuff です。

「きれいな」インターフェースを維持しながら、固有クラスを使用してそれ自体のすべてのインスタンスのデフォルトのデータセットを設定するより良い方法はありますか?

このようなコードで達成したいことは、クラス変数に格納された配列に何かを追加する add_something などのクラス メソッドを持つことです。

クラスがインスタンス化されると、その初期化メソッドでこの配列を使用して、そのインスタンスの状態を設定します。

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

ruby - Ruby 固有クラスの予期しない動作

まず、 「このブログ投稿からコピーした」固有クラスを取得するメソッドを追加しましょう。

次に、簡単なクラスを作成します

出力クラスへの2回目のプットを期待していました

なぜこれが起こったのか手がかりはありますか?

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

ruby - Rubyは、特定のクラスではなく、オブジェクト内のクラス変数を探します

この部分は機能します:

しかし、固有クラスを試してみると:

Ruby は@@var1Object代わりに を検索しExampleます。

このコードを Ruby 1.9.3 と 2.0 でテストしましたが、結果は同じでした。

なぜそれが起こるのですか?
2 つ目は、オフにできexample.get_var1ますか (オブジェクト内のクラス変数を検索しません)。

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

ruby - Ruby 固有クラス (sigleton クラス) は作成されましたか? 誰のために?

Ruby のメタプログラミングで混乱しました。

したがって、チュートリアルから次のことを学びました。

したがって、これはpoopメソッドがすでに、クラスStringのcatオブジェクト用であることを意味します。有名な教科書「Ruby のプログラミング」から、cat.poopを定義することで、Ruby が匿名クラス (singleton または eigenclass とも呼ばれる) を作成し、それがcatオブジェクトのクラスになり、元のStringクラスがそのスーパークラスになります。新しく作成された固有クラス。

それからこれは私を混乱させました。次のコードを参照してください。

3 つの質問:

  1. poopメソッドを定義するときに新しいクラスが作成されたようには見えません。それとも、作成されたものの、「#class」メソッドが呼び出しをスーパークラスの #class に自動的にリダイレクトしたのでしょうか? どちらが正しい?どうやってチェックするの?

  2. 別のメソッド、たとえばcat.runを定義すると、別の固有クラスが作成されるかどうか? その場合、クラス階層はどうなりますか?

  3. catが「kate」に再定義された場合、うんち見つかりません。なんで?うんちは猫が利用できるべきではありませんか?

ありがとう!

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

ruby - クラス オブジェクトの固有クラスを開くために、なぜ「class << self」が「class << Foo」よりも一般的ですか?

Ruby プログラマーは通常、次のようclass << selfにクラス本体内で使用して、クラス オブジェクトの固有クラスを開きます。

Fooただし、この同等の形式はめったに見ません (クラスとして既に定義されていると仮定します)。

2 番目のスタイルよりも 1 番目のスタイルを好む理由はありますか?

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

ruby - クラスを拡張するモジュールシングルトンを持つ

私のアプリケーションには、アプリケーション間で再利用されるシングルトンがあります。そのシングルトンがクラスからいくつかのデフォルト メソッドを取得するだけでなく、モジュール/固有クラスをカスタマイズできるようにしたいです。instance何よりも、すべての呼び出しでユーティリティ シングルトンを呼び出したくありません。

これが例です。私のデフォルトのクラスがUniverse::Earth. 次に、Earthそのクラスを「拡張」するモジュールがアプリケーションに必要です。

それが実行さgrow!れると、NoMethodError.

これらのアプローチを試しました:

どうすれば機能しますか?

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

ruby - スーパークラスからのサブクラスのクラス インスタンス変数の初期化

以下のコードのスーパークラスを考えると、すべてのサブクラスにいくつかのインスタンス変数が必要です。

以下のコードはそれを行いますが、考えられるすべてのサブクラスに対してその変数を適切に初期化できません。

スーパークラスの固有クラスを開きました。これがコードです(これもruby​​fiddleにあります):

可能なすべてのサブクラスを初期化したいと思います。最初の 2 つのプットでは、のみSomeSuperClass.variableが初期化されます。考えられるすべてのサブクラスに対してこの変数を初期化する方法がわかりません。何か案は?

私が見つけた最善の解決策は、次のように、アクセサーをオーバーライドして変数を遅延初期化することです。


動機:

特定のクラスのすべてのサブクラスが必要です。それを警戒と呼びましょう。直接のサブクラスで起こっていることを監視できます。この情報はクラスに保存されるため、それぞれの状態が異なります。

2 つのクラス A < B が同じ変数を変更するため、クラス変数は使用できません。サブクラスにも直接アクセスできないため、Vigilant のすべてのサブクラスに、サブクラスに関する情報を保存および取得するための容量を与える方法が必要でした。

固有クラスを開くアクセサーを定義することにより、次のように言えます。

メソッド (アクセサ) がそのスーパークラスの固有クラスに追加されたため、すべてのサブクラス Bclass B < A; endが実行できるようになり、ルックアップで見つけることができます。B.x

最初の例は、Bx が Ax と異なることを示しています。

さて、私が本当に理解していないのは、x がどこにあるかです。アクセサーではなく、変数。私がそれを行うB.instance_variables[]、 B.singleton_class.instance_variables と同じように表示されます

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

ruby - Ruby - ローカル変数を obj の固有クラスと共有する

メソッドに渡すMyObjectハッシュに基づいて、初期化された Ruby オブジェクトのメソッドを動的に定義しようとしています。メソッドの本体には、次のものがあります。my_hashinitializeinitialize

これは で失敗しますundefined local variable or method 'key' for #<Class:#<MyObject:0x007fc7abw0cra0>>。理由はありますか?

my_hash、多数のラクダ化されたキーを含む json 応答から作成されるため、必要な値を取得するための単純な Ruby メソッドを使用する方が便利です。