私はRustの複数の引数にInto
を使用しており、多くの割り当てや愚かな間違いを避けたいと考えています。Rustでメソッドを呼び出すことで変数の再宣言を繰り返さないようにする方法はありますか?
pub fn my_fancy_function<T>(v: T, u: T, i: T, l: T, j: T)
where T: Into<MyStruct>
{
let v = v.into();
let u = u.into();
let i = l.into(); // Oops, I transposed these!
let l = i.into();
let j = j.into();
// some code
}
大きな割り当てブロックの書き込みを避ける方法はありますか?マクロは、これを行うことができるかもしれない:
expand_into!(v, u, i, l, j);
into()
方法について何も特別なことは、それができる方法で、関数の開始時にちょうどたとえば、あなたが頻繁に再宣言するかもしれない多くの引数だ、ありません簡単に重複排除されます。
macro_rules! expand_into {
() =>();
($head:ident $(, $tail:ident)*) => (
let $head = $head.into();
expand_into!($($tail),*);
);
}
をし、それをテストするために:
これは良い答えです。私は最近、かなり複雑なマクロに取り組んできたので、私は心に再帰を持っていると思う。 – paholg