rust - 常量 ìf` 表达式条件下的关联常量

标签 rust associated-const

我正在尝试使用关联常量作为 if 表达式中的条件来初始化另一个常量。我认为这应该可行,因为我可以直接使用关联的常量来初始化其他一些常量,因此它适用于 const 上下文并且 if 表达式不依赖于任何其他值。

trait C {
    const c: i32;
}

trait StaticAssert<T1: C, T2: C> {
    const canUseAssociatedConst: i32 = T1::c;
    const canCompareAssociatedConst: bool = T1::c == T2::c;

    const check: i32 = if T1::c == T2::c { 1 } else { 0 };
}

编译时出现错误:

error[E0019]: constant contains unimplemented expression type
 --> src/lib.rs:9:24
  |
9 |     const check: i32 = if T1::c == T2::c { 1 } else { 0 };
  |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我不确定编译器想告诉我什么。我添加了 i32 后缀来强制文字实际上是 i32 值,以防止分支中不同类型的任何问题,但这也没有帮助。

最佳答案

据我所知,if 和其他内容(目前)在 const 上下文中不受支持。

但是,通常您可以按照以下方式实现类似的效果:

trait C {
    const c: i32;        
}

trait StaticAssert<T1:C, T2:C> {
    const canUseAssociatedConst: i32 = T1::c;
    const canCompareAssociatedConst: bool = T1::c == T2::c;

    const check: i32 = (T1::c == T2::c) as i32;
}

关于rust - 常量 ìf` 表达式条件下的关联常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54034747/

相关文章:

rust - 什么时候临时销毁?

Java 的速度几乎是 Rust 的两倍?!?我错过了什么?

rust - 如何使用跟踪订阅者设置自定义时间戳格式?

types - 为什么类型别名不能使用 Rust 中原始类型的关联常量?

rust - 在 Rust nightly 中使用关联的 const 和 const 泛型时类型不匹配

rust - 迭代递归结构时无法获取可变引用 : cannot borrow as mutable more than once at a time

rust - 如果我指定了正确的 `Fn` 边界,为什么我不能传递通用函数?