Rust 为什么返回子结构的结果时会出现借用错误';什么方法?

Rust 为什么返回子结构的结果时会出现借用错误';什么方法?,rust,Rust,我有一个包含另一个结构的结构,它调用所述子结构的方法。但是当我调用这个方法时,我收到一个借用错误 如果我将返回类型从&str更改为String,它工作正常,但我希望返回一个静态str struct子对象{ 五:选择,, } 植入儿童{ fn获取值(&self)->结果{ 匹配自我{ 一些(v)=>正常(v), 无=>错误(“值未定义”) } } } 结构父级{ 儿童:选择, } 内隐父代{ fn获取子对象值(&self)->结果{ 返回匹配self.child{ Some(child)=>ch

我有一个包含另一个结构的结构,它调用所述子结构的方法。但是当我调用这个方法时,我收到一个借用错误

如果我将返回类型从
&str
更改为
String
,它工作正常,但我希望返回一个静态
str

struct子对象{
五:选择,,
}
植入儿童{
fn获取值(&self)->结果{
匹配自我{
一些(v)=>正常(v),
无=>错误(“值未定义”)
}
}
}
结构父级{
儿童:选择,
}
内隐父代{
fn获取子对象值(&self)->结果{
返回匹配self.child{
Some(child)=>child.get_value(),
无=>错误(“子项未定义”)
}
}
}
fn main(){
设ch=Child{v:Some(2)};
让parent=parent{child:Some(ch)};
parent.get_child_value();
}
错误消息:

错误[E0507]:无法移出借用的内容
-->src/main.rs:20:22
|
20 |返回匹配self.child{
|                      ^^^^^^^^^^
|                      |
|无法移出借用的内容
帮助:考虑在这里借用:‘自我。孩子’。
21 | Some(child)=>child.get_value(),
|----数据移动到这里
|
注意:之所以发生移动,是因为'child'具有'child'类型,而该类型不实现'Copy'特性
-->src/main.rs:21:18
|
21 | Some(child)=>child.get_value(),
|                  ^^^^^
错误[E0515]:无法返回引用局部变量'child'的值`
-->src/main.rs:21:28
|
21 | Some(child)=>child.get_value(),
|                            -----^^^^^^^^^^^^
|                            |
|返回引用当前函数拥有的数据的值
|‘child’是在这里借来的

我找到了一个解决方案:你需要使用
Some(ref child)
而不是
Some(child)
,因为
Some(child)
借用了一个孩子。

有几件事:

  • 如果您想像您所说的那样返回一个“static
    str
    ”,请将
    &str
    更改为
    &'static str
    。否则编译器会假定
    str
    是从
    self
    借用的。这是由于“终生省略”;请参阅示例
  • match self.child{Some(child)=>/*…*/}
    尝试移动
    self.child
    字段,这是不可能的,因为
    self
    本身是借来的。处理这一问题的惯用/现代方法就是简单地说
    match&self.child
    (注意
    &
    )。
    Some(ref child)
    way是处理这个问题的老方法
  • 不需要
    get\u child\u value
    中的
    return
    match
    表达式是函数中的最后一个表达式,会自动返回

嗯,不,我不这么认为。这似乎是另一个问题,与我的问题不同。也许我弄错了,我不太确定。