有条件地将参数更新为Rust中的函数

有条件地将参数更新为Rust中的函数,rust,Rust,我试图有条件地更新函数的参数: 结构A{ foo:i32, 酒吧:i32, } 暗示{ fn foobar在您的条件中,如果a引用了x,它将在之后被销毁。然后a将保留对已销毁对象的引用 您可以通过在条件之前声明x变量来修复它: struct A { foo: i32, bar: i32, } impl A { fn foobar<'a>(&'a self) { let a; let x; if true

我试图有条件地更新函数的参数:

结构A{ foo:i32, 酒吧:i32, } 暗示{
fn foobar在您的
条件中,如果
a
引用了
x
,它将在之后被销毁。然后
a
将保留对已销毁对象的引用

您可以通过在条件之前声明
x
变量来修复它:

struct A {
    foo: i32,
    bar: i32,
}

impl A {
    fn foobar<'a>(&'a self) {
        let a;
        let x;
        if true { // something more complex obviously
            x = A {
                foo: self.foo,
                bar: self.bar,
            };
            a = &x;
        } else {
            a = self;
        }

        println!("{} {}", a.foo, a.bar);
    }
}

实际上,只需在两个分支中调用函数即可。请注意,这将增加运行时开销,在我看来,这是一段难看的代码。
    fn foobar(&self) {
        let x;
        let a = if true { // something more complex obviously
            x = A {
                foo: self.foo,
                bar: self.bar,
            };
            &x
        } else {
            self
        };

        println!("{} {}", a.foo, a.bar);
    }