【问题标题】:How to return an Option<_, _> from a getter method on a struct? [closed]如何从结构上的 getter 方法返回 Option<_, _>? [关闭]
【发布时间】:2020-04-07 23:01:48
【问题描述】:

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

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());
}

(Playground)

上述代码的输出是

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

【问题讨论】:

  • Option&lt;T&gt; 只接受一个类型参数,那么当你使用Option&lt;T, U&gt; 时你想要什么?
  • 您希望打印出来的内容是什么?我不明白您希望p.x() 的结果是什么。

标签: struct rust option


【解决方案1】:

花时间阅读您正在使用的类型的文档。 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!()
}

另见:


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

  • 在不执行某种复制/克隆的情况下,您不能在采用 &amp;self 的方法中返回拥有的 TU 类型。
  • 您不能在没有某种 trait bound 的情况下调用泛型类型的方法 (get)。该方法甚至似乎都没有定义。
  • 您无法使用Display 格式化程序格式化元组。

【讨论】:

  • 我认为他实际上想要Either
  • @JohnKugelman 确实!由于没有定义get,因此更难猜测。
  • @Shepmaster rust prelude 中是否有名为 get() 的方法?
  • @FawadAhmed 你可以看到all the methods in the Rust standard library named getthe prelude 的内容。话虽如此,编写了这段代码,所以不应该知道get应该是什么吗?
  • @Shepmaster 这就是我的困惑。感谢您纠正我。
猜你喜欢
  • 2019-09-17
  • 2022-07-07
  • 1970-01-01
  • 2017-03-25
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 2016-07-20
相关资源
最近更新 更多