代码之家  ›  专栏  ›  技术社区  ›  heroxav

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

  •  0
  • heroxav  · 技术社区  · 5 年前

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

    https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=27fcba42d135da6282bd000fd8e3db5d

    foobar &A . 根据某些条件,我想用另一个类型的值替换此参数 &A .

    'x' does not live long enough . 我的问题是是否有一种模式可以有条件地更新参数的值 a x ?

    1 回复  |  直到 5 年前
        1
  •  1
  •   yolenoyer    5 年前

    if 条件,你给 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);
        }
    }
    

    您还可以通过删除生存期和使用模式来简化代码 let a = if ... {} else {};

        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);
        }
    
    推荐文章