首页 > 解决方案 > 如何从结构上的 getter 方法返回 Option<_, _>?

问题描述

我已将泛型应用于结构,并希望Option<_, _>使用在结构上实现的 getter 方法以类型获取其输出。

struct Point<T, U> {
    x: T,
    y: U,
}
impl<T, U> Point<T, U> {
    fn x(&self) -> Option<T, U> {
        let z = &self.x;
        z.get(5);
    }
}

fn main() {
    let p = Point { x: 5, y: 10.0 };
    println!("p.x = {}", p.x());
}

游乐场

上述代码的输出是

error[E0107]: wrong number of type arguments: expected 1, found 2
 --> src/main.rs:6:30
  |
6 |     fn x(&self) -> Option<T, U> {
  |                              ^ unexpected type argument

标签: structrustoption

解决方案


花时间阅读您正在使用的类型的文档。Option只有一种泛型类型:

pub enum Option<T> {
    None,
    Some(T),
}

作为有根据的猜测,您可能打算使用tuple

fn x(&self) -> Option<(T, U)> {
    unimplemented!()
}

其他可能性是Result

fn x(&self) -> Result<T, U> {
    unimplemented!()
}

或者也许Either

fn x(&self) -> either::Either<T, U> {
    unimplemented!()
}

也可以看看:


您的代码有许多问题会阻止它编译:

  • 您不能在不执行某种复制/克隆的情况下返回拥有的TU类型的方法。&self
  • 你不能get在没有某种特征边界的情况下调用泛型类型的方法 ()。该方法似乎甚至没有定义。
  • 您不能使用Display格式化程序格式化元组。

推荐阅读