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是我使用库所需要的