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
)。&
way是处理这个问题的老方法Some(ref child)
- 不需要
中的get\u child\u value
:return
表达式是函数中的最后一个表达式,会自动返回match