rust 如何指定可能的返回类型之一?

tkqqtvp1  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(159)

我有一个函数,它返回两个依赖于某些逻辑的结构之一。我需要指定返回类型为两个之一。我该怎么做呢?

  1. struct A {}
  2. struct B {}
  3. fn picky() -> ??? {
  4. let a = A{};
  5. let b = B{};
  6. if 1 < 10 {
  7. a
  8. } else {
  9. b
  10. }
  11. }
  12. fn main() {
  13. picky();
  14. }

这感觉应该是微不足道的,但在谷歌上几个小时后,我仍然无法弄清楚。

xzlaal3s

xzlaal3s1#

你的函数只有一个返回类型,但这个类型可能是enum

  1. struct A {}
  2. struct B {}
  3. enum AB {
  4. A(A),
  5. B(B),
  6. }
  7. fn picky() -> AB {
  8. let a = A{};
  9. let b = B{};
  10. if 1 < 10 {
  11. AB::A(a)
  12. } else {
  13. AB::B(b)
  14. }
  15. }

这正是Result在Rust中的工作方式:你要么得到想要的值,要么得到一个错误,因为结果是一个有两个变量的枚举。

展开查看全部
r55awzrz

r55awzrz2#

如果你想这样做,结构可能有一些共同之处。
在这种情况下,我认为最好像这样返回一个Boxed trait:

  1. trait TraitForAandB {}
  2. struct A {}
  3. impl TraitForAandB for A {}
  4. struct B {}
  5. impl TraitForAandB for B {}
  6. fn picky() -> Box<dyn TraitForAandB> {
  7. let a = A{};
  8. let b = B{};
  9. if 1 < 10 {
  10. Box::new(a)
  11. } else {
  12. Box::new(b)
  13. }
  14. }
  15. fn main() {
  16. picky();
  17. }

Playground是here

展开查看全部

相关问题