常量 ìf` 表达式条件下的关联常量
Associated constants in condition of constant ìf`-expression
我正在尝试使用关联常量作为 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;
}
我正在尝试使用关联常量作为 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;
}