可以在Rust中推断数组长度吗?

时间:2016-10-18 12:04:56

标签: rust

我可以这样做:

let a: [f32; 3] = [0.0, 1.0, 2.0];

但为什么这不起作用?

let a: [f32; _] = [0.0, 1.0, 2.0];

在我看来,长度是多余的,无法推断。有没有办法避免必须明确指定它? (并且无需将f32附加到所有文字。)

2 个答案:

答案 0 :(得分:20)

_只能在两个上下文中使用:在模式中,匹配要忽略的值,以及作为类型的占位符。在数组类型中,长度不是类型,而是表达式,_不能在表达式中使用。

但是,您可以做的是将f32仅附加到其中一个文字中,并完全省略该类型。由于数组的所有项必须具有相同的类型,因此编译器将推断出数组的正确元素类型。

let a = [0.0f32, 1.0, 2.0];

答案 1 :(得分:1)

从1.39版本开始,可以使用一个简单的宏

git clone git_user1@AWS_IP:medicel_repo .
Cloning into '.'...
Load key "/Path/to/.ssh/medicel_aws_git.pub": Permission denied
git_user1@AWS_IP: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

用法

macro_rules! arr {
    ($id: ident $name: ident: [$ty: ty; _] = $value: expr) => {
        $id $name: [$ty; $value.len()] = $value;
    }
}