如何通过调用Rust中的方法来避免重复重新声明变量?

ide*_*n42 1 variable-assignment 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
}
Run Code Online (Sandbox Code Playgroud)

有没有办法避免写出大量的作业?宏可能能够这样做:

expand_into!(v, u, i, l, j);
Run Code Online (Sandbox Code Playgroud)

这个方法没有什么特别之处into(),它只是一个例子,你可能经常在一个函数的开头重新声明许多参数,这种参数可以很容易地重复删除.

DK.*_*DK. 5

正如@paholg所说,你可以用宏来轻松完成.但是,你不要需要使用递归,这将是慢一点,少一点有用的(你只能递归的次数有限之前,编译器只是放弃).

我还冒昧地使用方法的完全限定名称Into::into,以避免名称冲突问题:

macro_rules! expand_into {
    ($($names:ident),*) => {
        $(let $names = ::std::convert::Into::into($names);)*
    };
}
Run Code Online (Sandbox Code Playgroud)