問題タブ [hygiene]
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.
macros - マクロ衛生は、さまざまなモジュールでのみ保護されますか?
Julia 0.4.2に関しては
私は結果が になると予想していました(1, 1, 2)
。
ただし、別のモジュールでマクロを定義すると、期待どおりに機能します。
衛生状態は、シンボルの前にモジュールの名前空間を付けるだけのようです。したがって、最初のケースでは、マクロ エキスパンダーが異なるスコープを区別することはできません。
これは意図した動作ですか?
java - たくさんのプライベート クラスを作成するのは悪いスタイルですか?
複数の戻りオブジェクトを必要とする多くのメソッドを持つJavaでプロジェクトを行っています。このために、戻りオブジェクトをカプセル化するプライベート クラスを作成し続ける必要があります。たとえば、コード内の FontResult がフォント名とフォントサイズを返すため、オブジェクトは理にかなっていますが、必要な戻り値の型ごとに新しいオブジェクトを常に作成するのは間違っていると感じ、Java の記述方法を回避しようとしているようです。これは間違っていますか、それともこのようにして問題ありませんか? 言うな、聞かないというアプローチでコードを構築する必要がありますか?
例は次のとおりです。
macros - 構文パターン変数を指している構文パラメーター?
は、syntax-parameterが別の識別子のエイリアスとして動作するようにsyntax-parameterize
、 と組み合わせて一般的に使用されます。make-rename-transformer
p
上記のコードtmp
は、 によってバインドされた識別子と同様にうまく機能しlet
ます。ただし、によってバインドされp
たパターン変数のエイリアスを作成しようとすると、期待どおりに機能しません。tmp
with-syntax
代わりにp-unhygienic
構文を宣言し、それを にバインドすると(make-rename-transformer #'tmp)
、正常に動作します。
を使用してパターン変数の衛生的なエイリアスを作成するにはどうすればよいsyntax-parameterize
ですか?
c++ - 悪いコードにフラグを立てる方法
(GSL のアドバイスに従って) 悪いコードにフラグを立てたいのですが、どのように行うのが最善でしょうか? たとえば、以下の関数 foo が与えられた場合 (私がこれを自分で簡単に修正できる最良の例ではありません)。
3つのアイデアが頭に浮かびました。このフラグの利点 (欠点) は何ですか?
1.コメントのみ 2. マクロ + 静的アサート 3. コンパイラの警告macros - ラケット マクロが機能しない
Racket のマクロ システムを使用したことがないので、無知をお許しください。基本的に次のように、Racket の Datalog システムでルールを動的に定義しようとしています。
このようなものをコードに直接入れれば、すべてうまくいきます。ただし、これらのルールを動的に生成したいと考えています。通常の関数では、次のようにします。
しかしdatalog
、!
と:-
はすべてマクロであるため、これは不可能です。
私の解決策は、このマクロを書くことでした:
次に、次のように呼び出されます。
ただし、これが実行されている間、Datalog データベースにクエリを実行しても、a
との両方b
が true の場合は何もレンダリングされません。
構文オブジェクトを二重引用符で囲んでみました。これにより、何が出力されているかを確認できました。これは次のとおりです。
だから...コードに直接入力するだけで、正確に何が機能し、機能するのでしょうか。ここで何が起こっているのですか?これはある種の衛生的なマクロのことですか?本当にわからない。
ありがとう!
編集:これは、問題の完全な実行可能な例です。