「Parameters」というモデルを追加するRails4アプリケーションがあります。モデルの目的ですが、一般的なプログラミング用語でもあると心配しています。予約語がRuby、Rails 4、またはgemlistのgemと競合しないようにするにはどうすればいいですか?
ことを確保するためのベストプラクティス(各ステップ)とは何ですか:
Parameters
parameter.thing
...ルビー、Railsの、または私の特定の宝石リストで予約語と競合しないのだろうか?
「Parameters」というモデルを追加するRails4アプリケーションがあります。モデルの目的ですが、一般的なプログラミング用語でもあると心配しています。予約語がRuby、Rails 4、またはgemlistのgemと競合しないようにするにはどうすればいいですか?
ことを確保するためのベストプラクティス(各ステップ)とは何ですか:
Parameters
parameter.thing
...ルビー、Railsの、または私の特定の宝石リストで予約語と競合しないのだろうか?
Rubyにはオープンクラスの概念があります。それはどのようにRubyのであるから、
言っclass MyClass
def another_method
# do something useful
end
end
は、このアクションには、「反射のような」メカニズムはありません:それはクラスMyClass
がどこかで定義されている場合、それはあなたのコードに次の持つことは完全に有効だ、と述べました動作するように意図されています。
一つのこのような複雑なロジック構築することがあります
Parameters
クラスせずにアプリケーションを実行するには、$defined = const_get('Parameters') || true rescue false
;$defined
グローバルを使用します(例としてここではグローバルにしています)。か:
Parameters
にTracePoint#new(:class)
を使用しています。または
ObjectSpace#each
を使用しています。あるいは
しかし、私は上記の解決法のいずれにも該当しません。クラスMyAppParameters
に電話して、この名前で生きてください。
RubyMineのようなIDEは、予約語を使用するたびにテキストに色付けして警告する必要がありますが、わかりやすい場合は、Rails related reserved wordsというこのリストを常に確認できます。
これはRailsとRubyを処理しますが、宝石はどうですか? –
@PerryHorwich RubyGemsは現在、7719個の宝石をリストしているので、あなたの宝石の必要条件は野心的で、残念なことに起こりそうもありません。 – MarsAtomic
そして...私は、予約語と矛盾しないようにするために、リフレクションやその他のメカニズムを利用する一連のステップを実際に探しています。これは、オンラインリストが期限切れになる可能性があるため、私には好ましいと思われます。 –
ありがとうございます。これは私が探していた一種の洞察でした。私は、チェックが行われたときにどのクラスが読み込まれるかを検出するための良いアプローチです。問題のクラスが後でロードされないことを意味するわけではありません。親クラスが "スキャン"を意味するので、私は "ScanParameters"を使用しました。 –
"後でいつかクラスが読み込まれないという意味ではありません" - TracePointを使ったアプローチが検出に使用されるかもしれませんアプリケーションの生存期間の任意の時点でのクラスのロード/再オープン。私はそれを使用します。たとえば、パッチを適用するためにクラスを読み込むのを明示的に待つ必要があるとき。しかし、ここでもそれは過度のように見えます。 – mudasobwa
興味深い。再度、感謝します。私は、特定のクラスがロードされたときにこれが通知されることを理解していますが、それでも私はそのようなケースが可能であると予見したり予測できないようです。これはRubyのオープンクラスのアーキテクチャの「コスト」だと思いますか? –