問題タブ [mixins]
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.
ruby-on-rails - mixin から with_scope にアクセスできない
奇妙な問題に出くわしましたが、何が原因なのかよくわかりません。
Rails アプリで mixin を作成しましょうMixin
:
他の場所でモデルクラスにinclude
編集されます:
を呼び出すModel.new.foo
と、エラーが発生します。NoMethodError: undefined method with_scope
次に、foo
メソッドを次のように変更しました。
しかし、これもエラーになります。NoMethodError: protected method with_scope called
これは奇妙に思えます。mixin メソッドは .NET の他のメソッドと同じように動作すると予想していましたModel
。save
のようなすべてのインスタンスメソッドがそこにあり、通常どおり機能するため、これまでつまずいたことはありません。
私はそれをすべて間違っていますか?
ruby - mixin メソッド内でインスタンス変数にアクセスするにはどうすればよいですか?
mixin メソッド内でインスタンス変数にアクセスするにはどうすればよいですか? 2つの方法が考えられますが、どちらも問題があるようです。
任意のクラス メソッドと同じように、mixin メソッドがインスタンス変数に直接アクセスするようにします (例: self.text)。これに関する問題は、mixin メソッドを使用できる場所に制限を課し、ミキシングを行うクラスに特定の方法で名前を付けた特定のインスタンス メソッドを持たせることです。
インスタンス変数をパラメーターとして mixin メソッドに渡すと、次のようなコードになります。
例
また
これは私には厄介に見え、オブジェクト指向の原則に準拠していません。
それを行う他の方法はありますか?、心配するのは正しいですか?
grails - GroovyMetaClass-適切なメタクラスにカテゴリメソッドを追加します
Grailsプラグインで使用するカテゴリがいくつかあります。例えば、
これらのメソッドをメタクラスに追加して、カテゴリクラスを使用する必要がなく、インスタンスメソッドとして呼び出すことができるようにするための最良の方法を探しています。例えば、
これを行うのに役立つGroovy/Grailsクラスまたはメソッドはありますか、それともメソッドを繰り返し処理してすべて自分で追加することに固執していますか?
g++ - ミックスイン、可変個引数テンプレート、およびC++のCRTP
シナリオは次のとおりです。可変数のミックスインを持つことができるホストクラスが必要です(可変個引数テンプレートではそれほど難しくありません。たとえば、http: //citeseerx.ist.psu.edu/viewdoc/summary?doiを参照してください)。 = 10.1.1.103.144)。ただし、(CRTPイディオムを使用して)パブリックタイプを参照できるように、ミックスインをホストクラスによってパラメーター化することも必要です。この2つを混在させようとすると、問題が発生します。正しい構文は私にはわかりません。たとえば、次のコードはg++4.4.1でコンパイルできません。
エラーあり:
可変個引数テンプレートとCRTPの混合に成功した経験はありますか?
ruby - 「include module」ステートメントに遭遇したとき、ruby は何をインクルードしますか?
次のプロジェクト構造がある場合
lib.rb は次のようになります:-
そして a.rb と b.rb は両方とも lib.rb 内でいくつかのメソッドをミックスインする必要があり、両方ともモジュール内で次のように名前空間化されています:-
include ステートメントに遭遇したとき、ruby は何をしますか? クラスAとクラスBの両方を含むモジュール全体ではなく、lib.rbからのミックスインのみを含めたいことをどのように知っていますか?これは純粋にsubproject/libのrequireに基づいていますか、それとも間違っていますクラスAとBの定義を含めて、モジュール全体を含めますか?
ruby - モジュール内からクラスの包含名前空間にアクセスする
私は、とりわけ、いくつかの一般的な「ファインダー」タイプの機能を、それをミックスするクラスに追加するモジュールに取り組んでいます。問題: 利便性と美学の理由から、クラス自体と同じスコープで、クラスの外部にいくつかの機能を含めたいと考えています。
例えば:
これらのメソッド内で機能を実行できますが、問題ありません。そして、ケース 1 ( User.name('Bob')
) は簡単です。ただし、ケース 2 ~ 4 では、 の外部で新しいクラスとメソッドを作成できる必要がありますUser
。このModule.included
メソッドは、クラスへのアクセスを提供しますが、それを含むスコープへのアクセスは提供しません。クラスやモジュールで確認できる単純な「親」タイプのメソッドはありません。(名前空間については、つまり、スーパークラスでもネストされたモジュールでもありません。)
これを行う最善の方法は、クラスの文字列を解析し#name
て名前空間を分割し、文字列を定数に戻すことです。しかし、それは不器用に思えます。これが Ruby であることを考えると、もっとエレガントな方法があるべきだと思います。
誰にもアイデアはありますか?それとも、自分の利益のために賢すぎるだけですか?
ruby - Objective-C は Ruby のように Mixin をサポートしていますか?
Rubyにはモジュールがあり、モジュールを「ミックスイン」することでクラスを拡張できます。
Objective-C では、多くのクラスに「継承」させたい共通メソッドのセットがあることがわかりました。共通クラスを作成し、その共通クラスからすべてを派生させることなく、これを達成する方法は他にあるでしょうか?
dynamic - インスタンスの Groovy Mixin (動的 Mixin)
私は以下を達成しようとしています:
1つの大きな違いがあります-インスタンスでミックスインを行いたいです:
しかし、これは
Groovy Mixins JSRで提案されているようにこれを機能させる方法はありますか?
groovy - Groovy Mixin を使用して静的メソッドを追加する方法
groovy の mixin 機能を使用して、メソッドをインスタンス メソッドではなく「クラス (静的) メソッド」としてインポートしたいと考えています。ミックスイン クラスに静的メソッドがあるにもかかわらず、ミックスインを使用すると、宛先クラスのインスタンス メソッドに変換されます。インポートされたメソッドをクラス (静的) メソッドにしたいのですが、良い方法はありますか?