Rust常量表达式可以使用像Default这样的特征吗? [英] Can Rust constant expressions use traits like Default?

查看:19
本文介绍了Rust常量表达式可以使用像Default这样的特征吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此代码显示错误:

#[derive(Default)]
struct A {
    b: Option<()>,
    c: Option<()>,
}

const a: A = A {
    b: None,
    ..Default::default()
};
error[E0015]: calls in constants are limited to constant functions, tuple structs and tuple variants
 --> src/lib.rs:9:7
  |
9 |     ..Default::default()
  |       ^^^^^^^^^^^^^^^^^^

在这个小示例中,这不是一个大问题,但如果我有一个由实现Default特征的多个结构组成的结构,那么不能使用它至少会成为一个不便。

虽然我可以编写此代码,但它不会具有Default提供的灵活性:

impl A {
    const fn new(b: Option<()>) -> Self {
        A { b, c: None }
    }
}

const a: A = A::new(None);

有什么方法可以避免这样做吗?

推荐答案

否,不可能在常量上下文中使用特征。RFC #2632 — Calling methods on generic parameters of const fns中仍在讨论此问题。

另见:

这篇关于Rust常量表达式可以使用像Default这样的特征吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆