Rust 为什么会出现错误E0277:编译时无法知道类型为“[{integer}]”的值的大小?

Rust 为什么会出现错误E0277:编译时无法知道类型为“[{integer}]”的值的大小?,rust,Rust,在以下代码中,我得到了错误: error[E0277]:类型为“[{integer}]”的值的大小不能为 在编译时,在第`行已知n个数字[1..]{` 我四处搜寻了一下,但什么也没找到 fn main() { let mut numbers = Vec::new(); numbers.push(1); numbers.push(32); numbers.push(43); numbers.push(42); // ... And many mor

在以下代码中,我得到了错误:

error[E0277]:类型为“[{integer}]”的值的大小不能为
在编译时,在第`行已知n个数字[1..]{`
我四处搜寻了一下,但什么也没找到

fn main() {
    let mut numbers = Vec::new();
    numbers.push(1);
    numbers.push(32);
    numbers.push(43);
    numbers.push(42);
    // ... And many more
    println!("{:?}", numbers); // Sanity

    let mut sum = 0;

    // Problem code area
    for n in numbers[1..] {
        sum = sum + n;
    } 
    // Problem code area

    println!("{}", sum);
}
此外,如果我将问题行替换为以下内容(为所有权/借用和取消引用添加
&
*


为什么编译会以前一种方式失败?

数字[1..]
没有大小,因为它是一个简单的
数字。切片只能在某种指针后面使用,例如
&[t]
。以下问题有关于切片的更多信息:

由于它没有大小限制,
[T]
无法将
实现为迭代器
,迭代器是用于在
循环中迭代事物的特性。(请参阅)具有以下原型:

fn into_iter(self) -> Self::IntoIter;
Self
不能是非大小类型,因为
输入值按值取
Self

&numbers[1..]
是一个引用(type
&[T]
),它既有大小,又实现了迭代器中的
,因此工作正常

还提供了一条有关迭代器的错误消息,并建议使用
数字[1...iter()
。由于需要
&self
,因此可以在未指定大小的类型上调用它,因此这是解决问题的另一种方法



在许多地方,包括官方文件中,非限定术语“切片”用于指代参考类型
&[T]
。我称
数字[1..]
为裸切片,因为它不是参考;它的类型只是
[T]
数字[1..]
没有大小,因为它是一个由
数字组成的空的\
。切片只能在某种指针后面使用,例如
&[t]
,或
。以下问题有关于切片的更多信息:

由于它没有大小限制,
[T]
无法将
实现为迭代器
,迭代器是用于在
循环中迭代事物的特性。(请参阅)具有以下原型:

fn into_iter(self) -> Self::IntoIter;
Self
不能是非大小类型,因为
输入值按值取
Self

&numbers[1..]
是一个引用(type
&[T]
),它既有大小,又实现了迭代器中的
,因此工作正常

还提供了一条有关迭代器的错误消息,并建议使用
数字[1...iter()
。由于需要
&self
,因此可以在未指定大小的类型上调用它,因此这是解决问题的另一种方法



在许多地方,包括官方文件中,非限定术语“切片”用于指参考类型
&[T]
。我称
数字[1..]
为裸切片,因为它不是参考;它的类型只是
[T]

我不明白你的问题,因为你已经想出了一个解决方案。你担心什么?还有@hellow,你发布的错误消息是不同的。它是针对相同的错误代码,但没有关联。上面发布的消息是完整的。你试过运行代码吗?你可以在这里做:请不要指责任何人投反对票或反对票投票支持结束你的问题。首先,我没有投反对票,其次,你应该查看完整的错误信息!正如我发布的(它不见了?!)错误消息告诉您该怎么做。Sid,当您提出一个问题,并且有一些评论,例如建议或关于该问题的问题时,我们会问他们。当我们认为该问题已经得到回答时,我们会将其标记为重复问题。这并不意味着这一定是一个糟糕的问题,只是它已经被回答了我们很乐意帮助你,当你的问题是好的,这意味着他们是明确的,有一个良好的mcve(当它是关于一个编程问题)。请阅读。我不明白你的问题,因为你已经提出了解决方案。你担心什么?还有@hellow,你发布的错误消息是不同的。它是针对相同的错误代码,但没有关联。上面发布的消息是完整的消息。你试过运行代码吗?你可以在这里做到:请不要在downvo上指责任何人ting或投票支持关闭您的问题。首先,我没有投反对票,其次,您应该查看完整的错误消息!正如我发布的(它消失了?!)错误消息告诉您该怎么做。Sid,当您提出一个问题,并且有一些评论,例如建议或关于该问题的问题时,我们会问他们。当我们认为该问题已经得到回答时,我们会将其标记为重复问题。这并不意味着这一定是一个糟糕的问题,只是它已经被回答了我们很乐意帮助您,当您的问题是好的,这意味着他们是明确的,有一个良好的mcve(当它是关于一个编程问题)。请阅读。