我正在尝试使用关联常量作为 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/