問題タブ [alias-method]

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 投票する
2 に答える
959 参照

ruby-on-rails - Ruby on Rails はモデル プロパティの変更に機能を追加します

私の Rails モデルには、employer_wcb という 10 進数のプロパティがあります。employee_wcb が変更されたときに、ダーティ ビットが true に設定されていればよいのにと思います。employee_wcb セッター メソッドをオーバーライドしたいと思います。そうする方法はありますか(特にメタプログラミングを使用して)?

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

ruby - スーパーを呼び出す必要がある複数のモジュールを使用して、Ruby で同じクラス メソッドをオーバーライドします。メソッド エイリアスを使用しますか、それとも他の巧妙なトリックを使用しますか?

状況は次のとおりです。

User モデルと、認証用の 2 つのモジュール (Oauth と Openid) があります。どちらも をオーバーライドActiveRecord#saveし、実装ロジックをかなり共有しています。

ユーザーがいつ Oauth と Openid を介してログインしようとしているかがわかりますが、どちらもオーバーライドされているため、モジュールの実装の 1 つを条件付きで呼び出すことができるようにsave「最終的に」オーバーライドするにはどうすればよいでしょうか?save

これが私が説明しているものの基本構造です:

私はalias_methodso のように使用することを考えていましたが、1 つまたは 2 つの同様のモジュールがある可能性があるため、複雑になりすぎました。また、これらのsave_with_oauth方法(上記)を使用してみましたが、ほとんど機能します。欠けている唯一のことは、ActiveRecord::Base#save(スーパーメソッド) も呼び出す必要があることです。したがって、次のようになります。

しかし、Ruby でそれを行うことは許可されていません。

これに対する賢い解決策のアイデアはありますか?

それは何alias_method_chainをするでしょうか?人々がそれは悪い考えだと言っているようだったので、私はそれを避けてきました.

(私が行くように物事を見つける):

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

ruby-on-rails - alias_attributeと、元の属性名を使用したcreated and methodにより、ループが発生します

モデルの1つの属性にメソッドチェーンを動的に作成しようとしています。今では私はこの機能を持っています:

そのため、属性名の文字列を受け取り、' _without_filter 'のエイリアスを作成し(クラスの作成時に属性が存在しないため、alias_methodまたはalias_method_chainはここで失敗します)、属性名を使用して新しいメソッドを作成し、コンテンツ。

しかし、どういうわけか、「#{attribute_name} _without_filter」を呼び出すと、新しいメソッドが呼び出され(alias_attributeが何らかの理由であると思います)、プログラムはスタックループに入ります。

その属性の名前を変更しようとしているので、メソッドにその名前を使用できます...

誰かがこれについて私に教えてくれませんか。

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

ruby - alias_method と class_methods は混在しないのですか?

グローバル キャッシュ モジュールをいじろうとしてきましたが、これが機能しない理由がわかりません。

誰か提案はありますか?

これはエラーです:

... このコードによって生成されます:

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

javascript - JavaScript のエイリアス メソッド チェーン?

JavaScript では、既存の関数と同じ名前の新しい関数を作成しながら、新しい関数内から呼び出すことができるように元の関数を保持するにはどうすればよいでしょうか?

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

ruby - Ruby における責任の連鎖と alias_method の問題

ポリモーフィック オブジェクトの Ruby と ActiveRecord で一連の責任パターンを実装しようとしています。いくつか問題があります。

  • alias_method しようとすると、メソッドが定義されていないというエラーが表示されることがあります。
  • エイリアス化された関数 (original_method) が original_method を呼び出すメソッドを呼び出す無限チェーンの束を取得します。これは、既に上書きされているメソッドにエイリアスを付けると、本質的に「original_method」をエイリアス化されたメソッドのコピーにするためかどうか疑問に思っています。
  • 私は現在、「連鎖」のような関数に、定義されたすべてのメソッドを含む Setting のサブクラスを返させることでこれを回避していますが、クラス内の alias_method に非常に多くの問題があった理由に興味があります。

次に例を示します。

次に、Setting オブジェクトがあります。

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

ruby - あるインスタンスメソッドが別のインスタンスメソッドのエイリアスであるかどうかをテストするための洗練された方法はありますか?

単体テストでは、alias_methodで定義されたエイリアスメソッドが適切に定義されているかどうかをテストする必要があります。オリジナルに使用されているエイリアスに対して同じテストを使用することもできますが、より明確な解決策や効率的な解決策があるかどうか疑問に思っています。たとえば、1)メソッドエイリアスを逆参照して元の名前を返す方法、2)ある種の基になるメソッド識別子またはアドレスを取得して比較する方法、または3)メソッド定義を取得して比較する方法はありますか?例えば:

提案?

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

perl - OO-Perlエイリアシングクラス属性

作業中のモジュールがあります。私はこのようないくつかの属性を設定しています:

そして、AUTOLOADを使用して、これらの属性にアクセスするためのメソッドを作成したいと思います。たとえば、$foo->Bar()の値を返します$self->{BAR}。問題ない。すべてが標準です。

次に、エイリアスメソッドを作成します。たとえば、誰かが言った場合$obj->Fu();、私は戻り$self->{FOO}ます。私がやりたいのは$self->{FU}、と同じメモリ位置を指すを作成すること$self->{FOO}です。そうすれば、の値を設定すると$self->{FOO}$self-{FU}も設定されます。$self->{FU}このように、AUTOLOADの動作方法にあらゆる種類の変更を加える必要はなく、設定するたびに設定することを忘れないで$self->{FOO}ください。

これを行う簡単な方法はありますか?

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

ruby - class << self、alias_method、およびモンキー パッチ Mechanize::Cookie

Mechanize::Cookie の誤動作に問題があり、モンキー パッチを適用したいと考えています。私のコード:

これを追加すると、Cookie が追加されず、その理由がわかりません。

編集: 問題を確認するには、モンキー パッチの有無にかかわらず、次のコードを試してください。

パッチを適用しないと、完全な Cookie jar が表示され、空の jar が表示されます。

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

ruby - 継承されたクラスの ruby​​ method_alias

ruby のメタプログラミングについて深く掘り下げていて、次の質問があります。例:

そのため、mixin を 2 回使用するとエラーが発生します。そのようなものを修正する最良の方法は何ですか? 混合が存在することを確認し、新しい混合の前にそれを削除する方法