Rust 对期权的信赖
我的项目中有一个结构Rust 对期权的信赖,rust,Rust,我的项目中有一个结构a,它在逻辑上与另一个板条箱中的结构B相关。两者在内部都有一个可选的子结构(C/D) 假设在本例中,他们有以下结构定义: 结构D{ 名称:选项 } 结构B{ 规格:选项 } 结构C{ 名称:选项 } 结构A{ 规格:选项 } 现在我想在A到B中实现到-trait: impl-Into for C{ fn进入(自我)->D{ D{ 姓名:self.name } } } 恳求{ fn进入(自我)->B{ B{ 规格:self.spec.into() } } } 但生锈不允许
a
,它在逻辑上与另一个板条箱中的结构B
相关。两者在内部都有一个可选的子结构(C
/D
)
假设在本例中,他们有以下结构定义:
结构D{
名称:选项
}
结构B{
规格:选项
}
结构C{
名称:选项
}
结构A{
规格:选项
}
现在我想在A
到B
中实现到-trait:
impl-Into for C{
fn进入(自我)->D{
D{
姓名:self.name
}
}
}
恳求{
fn进入(自我)->B{
B{
规格:self.spec.into()
}
}
}
但生锈不允许:
error[E0277]: the trait bound `std::option::Option<D>: From<std::option::Option<C>>` is not satisfied
--> src\model\k8s.rs:615:29
|
615 | spec: self.spec.into()
| ^^^^ the trait `From<std::option::Option<C>>` is not implemented for `std::option::Option<D>`
|
= help: the following implementations were found:
<std::option::Option<&'a T> as From<&'a std::option::Option<T>>>
<std::option::Option<&'a mut T> as From<&'a mut std::option::Option<T>>>
<std::option::Option<&'a tracing_core::span::Id> as From<&'a tracing::span::EnteredSpan>>
<std::option::Option<&'a tracing_core::span::Id> as From<&'a tracing::span::Span>>
and 10 others
= note: required because of the requirements on the impl of `Into<std::option::Option<D>>` for `std::option::Option<C>`
现在的问题是:
有没有更好的方法让我错过?
如果没有:为什么将into()
选项变得如此麻烦?问题是您在选项上调用into::into
类型,而不是选项所包含的类型(C
)
您可以使用对选项的内部类型进行操作的方法:
impl Into<B> for A {
fn into(self) -> B {
B {
spec: self.spec.map(Into::into)
}
}
}
impl-Into for A{
fn进入(自我)->B{
B{
spec:self.spec.map(Into::Into)
}
}
}
在标准库中没有针对选项
(或来自
的等效项)的全面的impl-Into,这就是为什么您不能使用转化为
特性,直接在选项
上将选项
转化为选项
,并且必须依赖于选项::映射
或其他方式(如您的上一个片段)是的,A&C是我自己的代码,B&D是我使用库所需要的