問題タブ [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.
ruby - Ruby: 適切にラムダを使用する
始める前に、instance_eval メソッドと singleton メソッドをいじってみましたが、役に立ちませんでした。この問題に対する私の「最善の」試みを紹介します。
私は次のことをしようとしています:
上記の呼び出しは変更できません。
変更できるのは、ルールの定義方法です。
何かの値を取得するためにラムダ コード ブロックを取得する方法がわかりません。正しい方向への助けや指摘をいただければ幸いです。
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を使用しています。
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 のメソッドは呼び出されないため、問題も解決しません。
たぶん、このようなことを行うためのよりエレガントな方法があります。何か案は?
編集:
モジュールから継承されたクラスをデリゲーターとして使用することで、定義コンテキストの切り替えの問題を解決しました。
ruby - Instance_eval はモジュール内のクラスにアクセスできません
instance_eval
モジュールの組み込みに関する問題に遭遇しました。
次のコードを見てください。
このコードを実行すると、
バインディングと、メソッドとオブジェクトがクラスにバインドされる方法に関係があることを理解しています。私が理解できないのは、なぜC
内A
にアクセスできるのかということですが、block
. 私はそれらが同じ範囲にあることを期待しています。
ありがとう!
ruby - instance_eval とスコープ
次のコードがあります。
method_added
フックが起動されると、内部のコードはinstance_eval
追加されたメソッドと同じスコープ内で実行されますか? それとも、その外側で実行されますか?
これに関連する警告と落とし穴は何ですか?
ruby - ruby は instance_eval でインスタンス変数にアクセスします
ruby メタプログラミングを試していますが、instance_eval() で混乱が生じました。
以下の例を参照してください
@instance_var と local_var の両方がブロックでパス/変更できると予想していますが、取得しました
その結果、ローカル変数を共有 (パス/変更) できますinstance_val
が、インスタンス変数はself
共有できません。
と約instance_exec
:
今、私は自分の外側のインスタンス var を渡すことができますが、それを変更することはできません。
配列のインスタンス var を使用すると、インスタンス var を変更できますが、現在の配列オブジェクト内でのみ変更できます
要約プレイでinstance_eval
、またはinstance_exec
インスタンス変数ではなくローカル変数を使用しますか?
私が見逃したいくつかの概念はありますか?
ruby - instance_eval 内の define_method
クラスの instance_eval ブロック内でメソッドを定義すると、問題のないクラス メソッドが作成されます。
例えば)
しかし、instance_eval 内で define_method を使用すると、クラス メソッドの代わりにインスタンス メソッドが作成されます。
上記の現象が理解できません。誰か助けてください。