让我们考虑这样一个函数:
fn test<const N: usize>() -> [f64; N] {
if N == 1 {
[0.0_f64; 1]
} else if N == 2 {
[1.0_f64; 2]
} else {
panic!()
}
}
Run Code Online (Sandbox Code Playgroud)
N我的理解是编译器会在编译时评估 的值。如果是这种情况,该if语句也可以在编译时求值,因此应该返回正确的类型,因为[0.0_f64; 1]仅返回 ifN == 1且[1.0_f64; 2]仅返回 if N == 2。
现在,当我尝试编译此代码时,编译器失败,基本上告诉我返回数组的尺寸是错误的,因为它们没有明确地具有N长度。
我确实意识到,我可以将这个具体示例实现为
fn test<const N: usize>() -> [f64; N] {
match N {
1 => { [0.0_f64; N] },
2 => { [1.0_f64; N] },
_ …Run Code Online (Sandbox Code Playgroud)