我正在尝试使用关联的常量作为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
值,以防止分支中不同类型的任何问题,但这也无济于事。
答案 0 :(得分:5)
据我所知,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;
}