【发布时间】:2021-07-11 12:13:51
【问题描述】:
据我了解,&[T] 类型是一个“胖”指针(内存地址和大小),而不是切片本身,[T] 是被引用的实际切片。但是他们为什么不在下面的上下文中将[T] 设为语法错误呢?
let y: [i32; 6] = [1, 2, 3, 4, 5, 6];
// let z: [i32] = y[..]; // error: the size for values of type `[i32]` cannot be known at compilation time
let z: &[i32] = &y[..]; // OK
// let v: str = "Hello World"; // the size for values of type `str` cannot be known at compilation time
从错误:[i32] cannot be known at compilation,这只是一个错误,让我,用户,理解为什么这种语法是不可能的,还是因为我没有正确使用这种语法,它在某些情况下是有效的?
编辑:修正错字
【问题讨论】:
-
z的类型应该是什么? -
抱歉,我打错了一些代码,已修复。
x应该是y。注释掉的z应该是[i32]。 -
@DenysSéguret 严格来说
[T]实际上是一个实际的切片类型,尽管通俗地说&[T]也称为切片:doc.rust-lang.org/reference/types/slice.html -
你为什么要准确地要求 syntax 错误?仅仅因为某些东西没有语义意义并不意味着它是无效的语法。
-
feature(unsized_locals)最终可能使这个语法有效的代码也语义有效。