問題タブ [instance-eval]

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 に答える
58 参照

ruby - Ruby: 適切にラムダを使用する

始める前に、instance_eval メソッドと singleton メソッドをいじってみましたが、役に立ちませんでした。この問題に対する私の「最善の」試みを紹介します。

私は次のことをしようとしています:

上記の呼び出しは変更できません。

変更できるのは、ルールの定義方法です。

何かの値を取得するためにラムダ コード ブロックを取得する方法がわかりません。正しい方向への助けや指摘をいただければ幸いです。

0 投票する
5 に答える
466 参照

ruby - Instance_eval は do/end ブロックでは機能せず、{} ブロックでのみ機能します

クラスがある場合:

そして実行します:

それは99を出力しますが、実行すると:

エラーが返されます。`instance_eval': wrong number of arguments (0 for 1..3) (ArgumentError)

で do/end ブロックを使用できないのはなぜinstance_evalですか?

PS私はRuby 2.1.0を使用しています。

0 投票する
0 に答える
626 参照

ruby - カスタム定義コンテキストを持つ instance_eval

既存の lib の DSL カスタマイズを作成しようとしていますが、Ruby ブロック コンテキストについて誤解があります。

proc として保存されたブロックがあるとします。

単純にブロックを生成すると、このブロックの自己コンテキストは変更されません

電話すると

このブロックの self は N になり、デフォルトの definee は同じままです

インスタンスで instance_eval を呼び出すとき

some_block のセルフ コンテキストは N インスタンスに切り替わりますが、デフォルトの定義は N インスタンス メタクラスになります

インスタンスのコンテキスト内でブロックを生成し、別の場所にプロキシ定義コンテキストを生成する便利な方法はありますか?

たとえば、内部にいくつかのクラスを持つ Delegator インスタンスがあり、定義されたコンテキストをそれにプロキシしたい:

したがって、Definee は既に DSL を実装しており、instance_eval でカバーしていますが、定義コンテキストが正しくありません。Class_eval は Definee に委任され、MyDelegator のメソッドは呼び出されないため、問題も解決しません。

たぶん、このようなことを行うためのよりエレガントな方法があります。何か案は?

編集:

モジュールから継承されたクラスをデリゲーターとして使用することで、定義コンテキストの切り替えの問題を解決しました。

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

ruby - Instance_eval はモジュール内のクラスにアクセスできません

instance_evalモジュールの組み込みに関する問題に遭遇しました。

次のコードを見てください。

このコードを実行すると、

バインディングと、メソッドとオブジェクトがクラスにバインドされる方法に関係があることを理解しています。私が理解できないのは、なぜCAにアクセスできるのかということですが、block. 私はそれらが同じ範囲にあることを期待しています。

ありがとう!

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

ruby - instance_eval とスコープ

次のコードがあります。

method_addedフックが起動されると、内部のコードはinstance_eval追加されたメソッドと同じスコープ内で実行されますか? それとも、その外側で実行されますか?

これに関連する警告と落とし穴は何ですか?

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

ruby - ruby は instance_eval でインスタンス変数にアクセスします

ruby メタプログラミングを試していますが、instance_eval() で混乱が生じました。

以下の例を参照してください

@instance_var と local_var の両方がブロックでパス/変更できると予想していますが、取得しました

その結果、ローカル変数を共有 (パス/変更) できますinstance_valが、インスタンス変数はself共有できません。

と約instance_exec

今、私は自分の外側のインスタンス var を渡すことができますが、それを変更することはできません。

配列のインスタンス var を使用すると、インスタンス var を変更できますが、現在の配列オブジェクト内でのみ変更できます

要約プレイでinstance_eval、またはinstance_execインスタンス変数ではなくローカル変数を使用しますか?

私が見逃したいくつかの概念はありますか?

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

ruby - instance_eval 内の define_method

クラスの instance_eval ブロッ​​ク内でメソッドを定義すると、問題のないクラス メソッドが作成されます。

例えば)

しかし、instance_eval 内で define_method を使用すると、クラス メソッドの代わりにインスタンス メソッドが作成されます。

上記の現象が理解できません。誰か助けてください。