9
単一のジェネリック型を含む構造体のために与えられたフォーマッタ(Display
、Debug
、...)を生成するマクロを作成します。Rustのマクロを使用してインプットブロックを作成する際の問題
error: expected one of `,`, `=`, `>`, or `?`, found `std::fmt::Display`
--> test.rs:6:26
|
6| impl<$gen_param: $trait> $trait for $type_name<$gen_param> {
| ^^^^^^^^
は私が間違って何をやっている:私は後でコード(create_formatter!(MyStruct<T>, std::fmt::Display);
)でマクロを呼び出すと
macro_rules! create_formatter {
($type_name:ident<$gen_param:ident>, $trait:path) => {
impl<$gen_param: $trait> $trait for $type_name<$gen_param> {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
// isn't yet implemented
}
}
};
}
、コンパイラは次のようなフィードバックを与えますか?
特性バインドに使用するフラグメント指定子に 'ident'を使用するとうまくいきます。 (これは 'Display'で呼び出すと' use std :: fmt :: Display; 'を追加する必要があるということも意味します)。しかし、なぜ私は確信していません。 – wimh