問題タブ [scala-macros]

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

scala - Scalaマクロ用のASTの構築についてどこで学ぶことができますか?

Scalaのマクロが生成するASTを構築する方法をどこで学ぶことができますか?

Scaladocは私が望むほど役に立ちません。例えば:

しかし、Applyノードが何であるかをどのように理解できますか?ASTのノードタイプのリストはどこにあり、それらがどのように組み合わされているのですか?

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

scala - マクロとしてのユニバーサルコピー機能

プロジェクトでケース クラスのコピー機能を使用したいのですが、残念ながら継承も必要で、ケース クラスではうまく機能しません。
それで、任意のクラスの変更付きコピーオブジェクトを作成するメソッドを生成するマクロを書くことが可能かどうか疑問に思っています。現時点で私を止めているのは、AFAIK マクロが名前付きパラメーターをサポートしていないという事実です。誰かがそれを回避する方法を見つけましたか、または継承を使用するコピーを簡単に作成するための他の方法を提案できますか?

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

scala - 単純なscalaマクロ

次のようなscalaマクロが欲しいのですが。

取得したい:

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

scala-2.10 - 拡張されたassertscalaマクロ

どちらかが存在する場所でassertを使用すると、いくつかの厄介な問題に遭遇しました。

  • 利用できる良い情報がありません:なぜ失敗したのか、そしてアサートは何についてでしたか
  • アサーション情報は、スカラ関数のレイヤーが多すぎるなど、不要な情報の海に埋もれています。私はこれらの問題を頭の後ろに置いてきました。新しいscalaマクロが利用できるようになったので、Stack Overflowに進み、問題ごとに価値の高い質問と回答のペアを作成する予定です。そうすれば、問題を抱えている次の人は、それほど多くの誤った情報を調べなくて済みます。他の専門家が自分の知識でチャイムを鳴らした場合、私は私たちを悩ませたさまざまな問題についてさらに学ぶかもしれません。

これは単純なscalaマクロの例です。

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

scala - Using Scala's Macros to enforce type equality

I've been experimenting with MacroParadise (here and here), as well a few other newer features. Today while using TypeTags, I came to the realization that I can now do something like this to enforce type equality.

I then remembered that TypeTag implicits are compiler generated, and I had the idea that I may be able write a macro enabling more concise TypeTag usage like this:

I've only written a handful of macros in Lisp, and am stumbling around attempting to use the macro library. This lead me to several attempts, but they all end up expanding to something like Int =:= Int which doesn't work, or something like typeA =:= typeB where both are free(which also doesn't work).

This lead me to two questions: 1) Is this possible to do without the Context Bounds on foo(like written above)? 2) How do I correctly splice the Types obtained by the implicits into the result expression?

It seems to me that macros and implicits should allow me to fetch the WeakTypeTag implicit and use its tpe member for splicing, since they both occur at compile time.

0 投票する
0 に答える
324 参照

scala - Scala マクロとコード生成

簡単なサンプル ソースを考えると、コピー コンストラクターと暗黙的な変換メソッドを作成できる必要があります。Scala 2.10 と新しいマクロ機能を使ってこれを達成する方法を教えてください。

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

scala - 中置位置にあるScalaの型指定されていないマクロ

この質問に答えて、私はマクロパラダイスブランチを使用してScalaでHaskellスタイルの「where」式を実装しようとしています。コードはscala-whereで入手できます。これで、次のように書くことができます。

しかし、私が本当にやりたいのは、これを中置位置で呼び出すことができるようにすることです。

通常、この種のことは簡単ですが、マクロ呼び出しでそれを行う方法がわかりません。式(f1(1)* f2(2))は、マクロアプリケーションの前に入力されないため、暗黙の値クラスを作成するようなものは機能しません。そうでなければ、この種の構文を取得する方法はありますか?

これに失敗した場合は、2つのパラメータリストを作成するだけで、次のことが可能になります。

いいのですが、これも難しいようです。2つのパラメータリストを持つマクロを呼び出すことはできますか?

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

scala - 関数の戻り値からシンボルを抽出する

Symbolマクロを使用して、ケース クラス データ ツリーのフィールドとサブフィールドの sを参照するための一般的なソリューションを取得したいと考えています。

この要点に触発されて、次のスケルトンを作成しました。

このソリューションは次のように機能することを期待しています。

渡された関数が次の場合、マクロ変換は失敗するはずです。

  • 単一の式ではありません
  • ソースシンボルのサブフィールドであるシンボルの値を返しません。targetSymbol.owner[.owner...] == sourceSymbol

欠落しているマクロの実装は何ですか?

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

scala - マクロでシンボルテーブルにアクセスすることは可能ですか?

たとえば、マクロの呼び出しサイトでアクセス可能なすべての値とそのタイプを取得するには?または、少なくとも現在のクラスの値だけですか?例えば:

コンテキストとユニバースを調べましたが、適切な方法が見つかりませんでした。

私がこれまでに見つけた唯一の解決策は、マクロを囲むクラス/メソッドを(コンテキストを介して)取得し、ツリーを検索することです。

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

scala - Scala の @BeanProperty に似たものをマクロで実装することは可能ですか?

既存のフィールドに基づいて、コンパイル時に動的にメソッドをオブジェクトに追加するアノテーションまたは特性を作成したいと考えています。私はクラス レベルの何かに興味がありますが、フィールド レベルの注釈 (またはその他のより細かいもの) も同様に扱います。

Scala の実装の詳細について尋ねる古いスタック オーバーフローの質問@BeanPropertyには、「これはコンパイラ プラグインですが、マクロでもこれを実行できる場合があります」と回答されました。Scala 2.10 でのマクロの公式 (実験的である場合) リリースを考えると、この種の機能は現在可能ですか?