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

ruby - module_eval / class_eval / instance_eval はどのように行番号を数えますか

に渡された line_number が見つかりましたがclass_eval、エラーによって報告された行番号と一致module_evalinstance_evalません。この動作は、次のように言うruby​​-docでは説明されていません : (instance_eval例として使用)

オプションの 2 番目と 3 番目のパラメーターは、コンパイル エラーを報告するときに使用されるファイル名と開始行番号を指定します。

これら 3 つのメソッドclass_evalはすべて、ファイル名を指定する 2 つの追加のパラメーターmodule_evalinstance_eval受け入れ、エラー メッセージのテキストを設定する lineno パラメーターを指定します。

この質問には、この動作の実用的なデモがあります。

ただし、行番号の計算は説明よりも複雑であることがわかりました。ここにデモがあります

上記のコードは、line_no渡されたパラメータがinstance_evalエラーによって報告された行番号ではなく、line_no.

このパラメーターの正確な動作について疑問に思っていますか?

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

ruby-on-rails - nil:NilClass の未定義のメソッド `association_class'

私はSpree 2.1で作業しており、新しい支払いゲートウェイを追加しようとしていますが、このエラーはより一般的であるため、ここではSpree自体はそれほど重要ではありません.

( source ) クラスundefined method 'association_class' for nil:NilClassにいくつかのモジュールを追加した後、そのエラー ( ) が発生しました。Spree::PaymentMethod

spree/payment_method_decorator.rb

Spree::Core::CalculatedAdjustments ソース

Spree::Gateway ソース

残念ながら、現在Spree::PaymentMethod( source ) は少し壊れています。

なぜこれが起こるのか、それを修正する方法を知っている人はいますか?

実際、私はすでに答えを持っています(数時間の闘争の後)が、誰かが適切な説明でより良い答えを出すかもしれません. おそらく答えは明らかですが、それは私のためではなく、SOに関連するものを見つけることができなかったので、同様のレベルのRoR知識を持つ他の誰かがそれにさらに数時間を費やす必要がないことを願っています.

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

ruby - define_method と eval を使用した動的メソッド

Rails モデルでやりたいことをよく反映した、いくつかの異なる方法で実装された 2 つのサンプル クラスをまとめました。私の懸念は、どちらの方法を使用する場合の懸念事項があるとしても、何がわからないということです。そして、それらを実装する方法を説明する投稿、またはそれらを使用するときに避ける/注意するための一般的な警告のみを見つけました。私が見つけられなかったのは、これを安全に達成する方法、および私が注意していること、またはこのパターンを避けるべき理由の明確な説明です.

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

ruby-on-rails - 予期せぬ入力終了?

次のコードでは、次のようなエラーが発生してsyntax error, unexpected '\n', expecting :: or '[' or '.' (SyntaxError)いますが、問題の場所がわかりません。

私はclass_eval間違って使用していますか?

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

ruby-on-rails - エンジン クラスを再開しようとすると、循環依存関係が発生しますか?

エンジンから派生した Rails のクラスを再度開こうとしています。私は次のことをしました:

次の場所にあります。

これはすべて私のアプリにあり、実行できるはずです:

しかし、私がそうすると、エラーが発生します:

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

ruby - クラス定義のメソッド名に「self」を明示的に使用

このコードは、Rails Crash Course book からのものです。

のサブクラスは、 getter および setter メソッドを生成したい属性名でメソッドAccessorを呼び出すことにより、getter および setter メソッドを作成できるという考え方です。accessor

しかし、なぜ in を使用するのselfですdef self.accessor(attr)か?

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

ruby-on-rails - クラスの再オープンが機能する場合に、class_eval が時々使用されるのはなぜですか?

Railsアプリで次の形式のコードに出くわしました

そして、なぜ彼らがそうしなかったのか疑問に思っています

class_eval新しいコードに渡したいものが何もない場合に使用する利点はありますか?