返回构建于& str的对象

时间:2017-04-28 20:51:52

标签: rust ownership

当我想返回一个对象时,我只是指定它,但是当创建的对象基于字符串的引用时我该怎么办?我的例子:

fn init_keychain() -> keyring::Keyring<'a> {

    // Gets the username of the current user to save it in the right keychain
    let mut username = Command::new("whoami")
                        .output()
                        .expect("Failed to get current user");

    // Check for newline sequence in Command Output and strip it
    if username.stdout[username.stdout.len()-1] == 10 {
        username.stdout.pop();
    }

    let user = String::from_utf8_lossy(&username.stdout);

    // Create a new Keychain attribute to save the passord to
    keyring::Keyring::new("Service", &user.into_owned())
}

引发了错误:

error: borrowed value does not live long enough
  --> controller.rs:44:44
   |
44 |             keyring::Keyring::new("Service", &user.into_owned())
   |                                              ^^^^^^^^^^^^^^^ does 
not live long enough
...
49 |         }
   |         - temporary value only lives until here
   |
note: borrowed value must be valid for the lifetime 'a as defined on 
the body at 30:29...

我理解错误发生的原因 - &user一旦init_keychain()结束,参考&str就会超出范围。

如何在需要into_owned()的位置创建一个对象,然后将其返回?我完全错过了一些生锈的魔法吗?我尝试使用clone()/boot/config-*,但这并未改变用户的生命周期。这就是我的知识结束的地方。

我对Rust的所有权概念感到困惑,我无法在docs,Google或Stack Overflow中找到信息。但也许我真的很难搞清楚这一点。

0 个答案:

没有答案