問題タブ [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 に答える
684 参照

ruby - このルビーカスタムアクセサーはどのように機能しますか

したがって、以下のclass_evalのメソッドは、実行時に定義された属性のアクセサーを動的に作成します。たとえば、構成ファイルから読み取られた(実行時まで不明な)属性を持つ構成オブジェクトを作成するために使用できます。elseブランチを除いてすべて理解しています。私が正しければ、* valに渡された値が1つある場合、elseブランチは属性値(val [0])を返します。ただし、その記述方法では、* varに渡された値が複数ある場合は配列(val)を返すと予想されます。特に、私が次のようなものを持っている場合:

次に、コードを読むことから私は期待し@value to be [=,5]ます。ただし@value、配列[=、5]ではなく5を返します。これはどのように可能ですか?

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

ruby - class_evalの使用法を理解しようとしています

私はrails-settingsgemを使用しており、ActiveRecordクラスに関数を追加する方法を理解しようとしています(カードゲーム用に独自のライブラリを構築しています)。このgemがメタプログラミングの1つを使用していることに気付きました。 ActiveRecord :: Baseクラスに関数を追加するためのテクニック(私はrubyのメタプログラミングマスターからはほど遠いですが、それを学ぼうとしています)

私が理解していないのは、彼がActiveRecord :: Baseでclass_evalを使用する理由ですが、ActiveRecord :: Baseクラスを開いて関数を定義するだけの方が簡単ではなかったのでしょうか?特に、ブロックには動的なものは何もありません(動的とは、変数を含む文字列に対してclass_evalまたはinstance_evalを実行する場合です)

このようなもの:

2番目のclass_eval(def設定の前)は、「has_settings」が正しいすべてのクラスでその場で関数を定義することであることを理解していますか?ここで同じ質問ですが、彼は「class_eval....defsettings」の代わりに「defself.settings」を使用できると思います。

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

ruby - class_evalとclass<<classNameの違いは何ですか?

私はRubyスターターです。これらは両方とも(出力で)非常に似ていることがわかりましたが、以下のコンテキストでの違いを理解できませんでした。たとえば、私はクラスを持っています

このように拡張できます

そしてまたこのように

<<いつ、いつ使用する必要がありclass_evalますか?

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

ruby - テストのために一時的に「class_eval」を行うにはどうすればよいですか?

テストのために特定のメソッドをクラスに一時的に適用することはできますか? 適用する多くの方法に応じて仕様を実行できるようにしたいと考えています。さまざまな設定で多数のフィクスチャを作成することもできますclass_evalが、テストでモデルだけを作成する方が簡単であることがわかりました。例えば:

次に、別のコンテキスト ブロックで:

しかし、最後のコンテキスト ブロックの問題は、クラスが変更されていることです (上記のコンテキスト ブロックで変更されています)。後にクラスをリセットすることは可能class_evalですか? どのように?

ありがとう!

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

ruby - Ruby1.9.2class_eval変数

配列をソースとして許可するSettingslogicフォークでは、ruby 1.8.7ではすべてが機能していますが、ruby1.9.2ではエラーが発生します。問題はコードのこの部分にあります:

#{}が奇妙な方法で評価されているように見えます。「#{@ section}」は文字列ではなく、配列のようです。誰かがこれを説明できますか?

エラートレース:

助けてくれてありがとう

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

ruby - class_evalの問題Ruby

呼び出されるメソッドが「plus」で始まる場合、class_evalを使用してメタプログラムでメソッドを作成しようとしています。ただし、class_evalの実際の構文をまとめるのに問題があります

plus10(または任意の数値)が呼び出されると、新しく作成されたメソッドは、呼び出されている整数にその数値を追加し、新しい合計を生成する必要があります。

ありがとう

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

ruby-on-rails - Ruby/Rails: class_eval はこのコードを評価したくない

Omniauth のモックを生成するために、このメソッドをconfig/environments/development.rb

次に、同じファイルを呼び出します。

しかし、私は得る:

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

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

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

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

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

ruby - 「class_eval」文字列内の変数スコープは何ですか?

class_eval現在のクラスのコンテキストで実行されるコードを記述するために使用しています。次のコードでは、属性値の変更に対するカウンターを追加します。

私の理解では、ランタイム クラスのコンテキストでclass_evalブロックが評価されるということです。私の場合は、. 上記のコードは次のように実行されると思います。class Foo

ただし、上記のコードは、エラーが原因であるというエラーが発生しました@count += 1。なぜスーパー@countになっているのかわかりませんか?nil:NilClass

一方、@selman は@countインスタンス メソッド内に代入を配置するソリューションを提供しており、それは機能します。

変数スコープの変更が機能するのはなぜですか? 次の文字列をどのようにclass_eval実行しますか?

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

ruby - Ruby - class_eval を使用してメソッドを定義する

私は SaaS スタンフォード クラスを行っており、この課題のパート 5 を実行しようとしています。

私はこの概念を理解するのに本当に苦労しています。これは私がやろうとしたことです:

私はおそらくあらゆる種類の間違ったことをしています.The Book Of Rubyのメタプログラミングに関する章を読んでも、まだ理解できません.誰かがこれを理解するのを手伝ってくれますか?