Rust 怎么规定函数返回类型为 enum 的一个特定 variant

发布于 2022-09-30 23:11:47 字数 310 浏览 32 评论 0

enum E {
    A(isize),
    B(isize)
}

fn get_A() -> E {
    E::A(1)
}

fn main() {
    let E::A(a) = get_A(); // refutable pattern in local binding: `B(_)` not covered
}

怎么让编译器知道 get_A 就只会返回 E::A。

如果不行,能不能把他的返回值强制断言成 E::A。

如果确实不行,能不能提供一下别的建议。

谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

薄荷→糖丶微凉 2022-10-07 23:11:47

请尝试通过 newtype 模式 来构建:

trait EnumTrait {}

struct A(isize);
impl EnumTrait for A {}

struct B(isize);
impl EnumTrait for B {}

// 利用返回参数 `impl` 语法简化泛型写法,相当于
// fn<T: EnumTrait> get_a() -> T
fn get_a() -> impl EnumTrait {
    A(42_isize)
}

fn main() {
    let A(a) = get_A();

    // rust 1.58 支持直接捕获上下文中的变量
    println!("{a}");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文