web-dev-qa-db-ja.com

マクロ内で識別子にプレフィックス/サフィックスを付ける方法は?

関数を定義するマクロを使用する場合、関数にプレフィックスを追加することはできますか?

_macro_rules! my_test {
    ($id:ident, $arg:expr) => {
        #[test]
        fn $id() {
            my_test_impl(stringify!($id), $arg);
        }
    }
}
_

たとえば、fn my_test_$id() {

数字で始まる識別子を使用してテストを定義していますが、共通のプレフィックスを使用したいと思います。

16
ideasman42

[...]関数にプレフィックスを追加することは可能ですか?

いいえ、本当に、本当にありません。 スーパーほんの少しでも全くありません。

共通のプレフィックスを使用したいと思います。

代わりに、それらすべてをmodに入れてください。

6
DK.

前述のように、これにはサブモジュールを使用する必要がありますが、マクロはサブモジュールを作成でき、サブモジュールはネストして名前を重複させることができ、サブモジュールはimplsを提供でき、testsサブモジュールは魔法ではないことに注意してください。

私はかつて プルリクエスト を送信しました。これは、#[no_mangle]エクスポートはそれを難し​​くします。

1
Jeff Burdges

現在、これは安定版ではサポートされていません。


ただし、毎晩concat_identsと呼ばれる機能があります。

concat_idents!(my_test_, $id)

見る

更新:これを安定版リリースに追加する短期的な計画はないようです。問題を参照してください。

1
ideasman42