是否可以声明没有明确长度的数组?

时间:2016-08-03 09:03:46

标签: arrays rust

在Rust中,您可以声明具有特定大小的数组:

struct Vector(f64, f64);

fn main() {
    let points: [Vector; 3] = [
        Vector(1.0, 1.0), 
        Vector(5.0, 5.0), 
        Vector(0.0, 0.0),
    ];

    println!("Length is {}\n", points.len());
}

有没有办法让长度(在这种情况下为3)是隐式的,因为3个元素在数组中。与你在C中的表现类似:

typedef double Vector[2];
Vector points[] = {{1, 1}, {5, 5}, {0, 0}};
printf("Length is %d\n", sizeof(*points) / sizeof(points));

请注意,这是一个绝对的初学者问题。

1 个答案:

答案 0 :(得分:4)

从Rust 1.10开始,答案是,基于一系列快速测试:

let points              = [ ... ]; // OK
let points: [_     ; 3] = [ ... ]; // OK
let points: [Vector; _] = [ ... ]; // REJECTED
let points: [Vector; 3] = [ ... ]; // OK

在Rust中,_是让编译器为您填写空白的简单方法。不幸的是,它不被接受而不是3:编译器相当严厉地抱怨它需要一个表达式。

这可能不太令人惊讶,因为数组目前是一个特例:Rust泛型不允许使用非类型泛型参数,所以编译器" hacks"阵列的位置可以理解为有限。

对于好奇,确切的错误是:

error: expected expression, found `_`
 --> <anon>:4:21
4 |>     let points: [_; _] = [
  |>  

注意:现在等待其他人证明我错了:)