3
場合によっては、何らかのテキスト、またはのないマクロに引数を渡したい場合があります。(何も書かれていないかのように空白が入ります)。我々はvar
随意には、マクロ全体を複製するのではなく、マクロ本体は、上記の例では、次に大きい最高と仮定して、可変とすることが必要かもしれ空白/空の引数をRustのマクロに渡すにはどうすればよいですか?
macro_rules! testme {
($var:ident, $code:block) => {
for i in 0..10 {
let $var = i;
{ $code }
if $var > 5 {
println!("over 5");
}
}
}
}
fn main() {
testme!(myvar, {
println!("{}", myvar);
});
}
:
この出発点を与えられます。
macro_rules! testme {
(private $var:ident, $code:block, $var_qual:tt) => {
for i in 0..10 {
// imagine this is a lot more code :)
let $var_qual $var = i;
{ $code }
if $var > 5 {
println!("over 5");
}
}
};
(mut $var:ident, $code:block) => {
testme!(private $var, $code, mut)
};
/*
($var:ident, $code:block) => {
testme!(private $var, $code,)
// ^how to pass in a blank argument?
};
*/
}
fn main() {
testme!(mut myvar_mut, {
myvar_mut += 10;
println!("{}", myvar_mut);
});
/*
testme!(myvar_immutable, {
println!("{}", myvar_immutable);
});
*/
}
は、私の知る限り、空の引数を渡す方法はありません、エラーを参照してください/**/
コメントコメントを解除します。
空の引数をマクロに渡して、このような例を作ることはできますか?
なぜそれが欲しいですか?テキスト入力の場合は、何もせずに空の文字列にすることができます。 – ljedrz
@ljedrz、Textは全く異なるケースです。これはオプションの*キーワード*です。そのため引数として渡すのは簡単ではありません。私はイテレータとして動作し、宣言する変数の名前をとるマクロを使用しています。これは変更可能である必要がありますか?元のコードへのリンクを投稿できますが、必要がないかどうかはわかりません。 – ideasman42
ナー、私は今それを見ることができます。私はマクロに頼るのに慣れていないと思います。普通のコードとはまったく異なる種類の問題です。 – ljedrz