Rust 锈蚀:如何指定一种可能的退货类型?

Rust 锈蚀:如何指定一种可能的退货类型?,rust,Rust,我有一个函数,它返回两个依赖于某种逻辑的结构中的一个。我需要将返回类型指定为两种类型之一。我该怎么做 struct A {} struct B {} fn picky() -> ??? { let a = A{}; let b = B{}; if 1 < 10 { a } else { b } } fn main() { picky(); } 这感觉应该是微不足道的,但在谷歌上玩了几个小时后,我仍

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

struct A {}

struct B {}

fn picky() -> ??? {
    let a = A{};
    let b = B{};
    if 1 < 10 {
        a
    } else {
        b
    }
}

fn main() {
    picky();
}

这感觉应该是微不足道的,但在谷歌上玩了几个小时后,我仍然无法理解。我是新手。

您的函数只有一个返回类型,但此类型可能是:


这正是Rust中的工作原理:您要么得到所需的值,要么得到一个错误,因为结果是一个包含两个变量的枚举。

您的函数只有一个返回类型,但此类型可能是:


这正是Rust中的工作原理:您要么得到所需的值,要么得到一个错误,因为结果是一个包含两个变量的枚举。

如果您想这样做,结构可能有一些共同点

在这种情况下,我认为最好返回一个装箱特征,如下所示:

性状TraitForAandB{} 结构A{} A{}的impl TraitForAandB 结构B{} B{}的impl TraitForAandB fn挑剔->盒子{ 设a=a{}; 设b=b{}; 如果1<10{ 盒子:纽瓦 }否则{ 盒子:新手 } } fn干线{ 挑剔的; }
游乐场是。

如果您想这样做,结构可能有一些共同点

在这种情况下,我认为最好返回一个装箱特征,如下所示:

性状TraitForAandB{} 结构A{} A{}的impl TraitForAandB 结构B{} B{}的impl TraitForAandB fn挑剔->盒子{ 设a=a{}; 设b=b{}; 如果1<10{ 盒子:纽瓦 }否则{ 盒子:新手 } } fn干线{ 挑剔的; }
游乐场是。

游乐场中的一些用法示例:@ilmoi如果两种类型中的一种可以被视为正常返回,另一种可以被视为异常/错误返回,那么在两种类型处于同等地位的情况下,您可以滥用结果。如果不确定使用什么,只需创建您自己的枚举,如此答案所示。游乐场中的一些使用示例:@ilmoi如果两种类型中的一种可以被视为正常返回,而另一种可以被视为异常/错误返回,则在两种类型相同的情况下,您可以滥用结果。如果不确定使用什么,只需创建您自己的枚举,如本答案所示。
struct A {}
struct B {}

enum AB {
    A(A),
    B(B),
}

fn picky() -> AB {
    let a = A{};
    let b = B{};
    if 1 < 10 {
        AB::A(a)
    } else {
        AB::B(b)
    }
}