小编Lat*_*ker的帖子

不同的返回值取决于通用常量的值

让我们考虑这样一个函数:

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)

generics rust

3
推荐指数
2
解决办法
720
查看次数

标签 统计

generics ×1

rust ×1