問題タブ [metaprogramming]

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 投票する
8 に答える
1229 参照

php - コード生成のためのインデント

多くの場合、プログラマーは他のコードを生成するコードを記述します。

(専門用語はメタプログラミングですが、単なるクロスコンパイラよりも一般的です。HTMLを生成するすべてのPHP WebページまたはすべてのXSLTファイルについて考えてください。)

私が難しいと思う領域の1つは、手書きのソースファイルとコンピューターで生成されたオブジェクトファイルの両方がデバッグを支援するために明確にインデントされていることを確認する手法を考え出すことです。2つの目標はしばしば競合しているように見えます。

これは、PHP/HTMLの組み合わせでは特に難しいと思います。私はそれが理由だと思います:

  • ソースファイルには、生成するPHPよりも多くのHTMLコードが含まれている場合があります
  • HTMLファイルは、たとえばSQLステートメントよりも長くなる傾向があり、より適切なインデントが必要です。
  • HTMLにはスペースに依存する機能があります(タグ間など)
  • 結果はSQLステートメントよりも公に見えるHTMLであるため、合理的な仕事をするためのプレッシャーが大きくなります。

これに対処するためにどのようなテクニックを使用していますか?


編集:私は、きれいなHTMLコードを生成することを気にしないために少なくとも3つの引数があることを受け入れます:

  • コード生成の複雑さが増します。
  • ブラウザによるレンダリングに違いはありません。開発者はFirebugなどを使用して見事に表示できます。
  • パフォーマンスへの軽微な影響-空白文字のダウンロード時間が長くなりました。

私は確かに、インデント(特にSQL)を考慮せずにコードを生成することがあります。

ただし、反対の方向に進むいくつかの議論があります。

  • 実際には、生成されたコードを頻繁に読み取ることがあります。それにアクセスするための追加の手順があると不便です。
  • HTMLには、スペースに敏感な問題がいくつかあり、ときどき噛み付きます。

たとえば、次のコードについて考えてみます。

次のコードよりも明確です。

ただし、HTMLに空白が含まれているため、レンダリングも異なります。

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

metaprogramming - Nemerleマクロのインフィックス形式

非常に特殊な乗算演算子が必要だとします。次のマクロで実装できます。

そして、私はそれを次のように使うことができます

そしてその仕事。

しかし、私が本当に望んでいるのは、現在開発中のDSLIm用の「英語」のような演算子です。

そして私がそれを次のように使おうとすると

コンパイラは'expected;'で失敗します エラー

何が問題ですか?この中置形式のマクロを実装するにはどうすればよいですか?

0 投票する
12 に答える
3661 参照

c++ - テンプレートはどこで役に立ちますか?

私の職場では、 iostreamstringvectormap、および奇数アルゴリズムまたは 2 つを使用する傾向があります。テンプレート手法が問題の最善の解決策である状況は、実際にはあまり多くありません。

ここで私が探しているのは、アイデアと、必要に応じて、実際に遭遇した問題に対する新しいソリューションを作成するためにテンプレート手法をどのように使用したかを示すサンプル コードです。

賄賂として、あなたの回答に対する賛成票を期待してください。

0 投票する
9 に答える
28748 参照

c# - C# でメタプログラミングは可能ですか?

特に、この c++ コードに似たコードをコンパイル時に c# で実行することは可能でしょうか?

0 投票する
10 に答える
9427 参照

c++ - C++ で見た最もクールなメタプログラミングの例は何ですか?

C++ で見た最もクールなメタプログラミングの例は何ですか?
C++ で見たメタプログラミングの実用的な用途は何ですか?

0 投票する
12 に答える
2572 参照

templates - Dテンプレート:最もクールなハック

あなたがDプログラミング言語で行った、または行ったのを見た中で最もクールで実用的なメタプログラミングハックは何ですか?ある程度実用的なとは、たとえば、コンパイル時のレイトレーサーを除外することを意味します。

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

c++ - boost::mpl を使用してポリシーを作成する方法は?

次のようなものを使用して、アプリケーションのポリシーを作成しました。

ポリシー クラスは次のようになります。

ポリシーを作成するには:

MyPolicy を使用するには:

彼らが呼び出す場所:

基本的に、Cons はここで型リストを作成します。それはかなり簡単です。ただし、typedef の cons 行はちょっと見づらいです。これを行うことができるポリシー コンバイナーがあると理想的です。

任意の数のポリシーを設定できるため、CombinePolicy には C++0x での可変個引数テンプレートのサポートが必要です。これは最先端のコンパイラで実験的にのみ利用可能です。ただし、boost:mpl ライブラリは、一連の前処理のトリックを使用して問題を解決/回避したようです。私は次のようなものを使用できると思います:

そして、次を呼び出します。

次に使用します:

明らかに、ここでsome_magic_lambda_expressionを理解するのに少し苦労しています。ここでは、mpl の専門家にとっては非常に些細なことだと思います。

前もって感謝します。

0 投票する
6 に答える
10069 参照

python - Python: pre メソッドと post メソッドでメソッド呼び出しをラップする

クラス A (他の誰かからインポートしているので変更できない) をクラス X にインスタンス化しています。

A のメソッドへの呼び出しをインターセプトまたはラップする方法はありますか? つまり、以下のコードで呼び出すことができます

出力を取得します

ティアがいっぱい!

0 投票する
4 に答える
8987 参照

c++ - マシンのエンディアンを判断するためにC++スタイルのコンパイル時アサーションを実行する方法はありますか?

テンプレート化された低レベルのシリアル化コードがいくつかあり、コンパイル時にシステムのエンディアンを明らかに知る必要があります(テンプレートはシステムのエンディアンに基づいて特殊化されているため)。

現在、いくつかのプラットフォーム定義を含むヘッダーがありますが、テンプレート化されたテスト(static_assertやboost_ifなど)を使用してエンディアンについてアサーションを作成する必要があります。私のコードである理由は、さまざまなマシン、多くの専門ベンダー、そしておそらく2008年には存在しないデバイスでコンパイルして実行する必要があるため、そのヘッダー年に何を入れる必要があるかを実際に推測することはできません道を下って。また、コードベースの予想寿命は約10年です。だから私は永遠にコードに従うことはできません。

うまくいけば、これで私の状況が明らかになります。

では、ベンダー固有の定義に依存せずにエンディアンを判断できるコンパイル時テストを知っている人はいますか?

0 投票する
6 に答える
19462 参照

ruby - Ruby での method_missing の落とし穴

method_missingRubyでメソッドを定義する際の注意点はありますか? 継承、例外のスロー、パフォーマンス、またはその他からのそれほど明白ではない相互作用があるかどうか疑問に思っています。