上下文:我需要在Rust中扁平化数组的向量,我从Rust社区成员那里找到了以下代码:
fn flatten<T: Clone, const N: usize>(data : Vec<[T; N]>) -> Vec<T> {
unsafe {
from_raw_parts(data.as_ptr() as *const _, data.len() * N).to_vec()
}
}
from_raw_parts
从原始指针和长度返回切片。我们传入的原始指针的类型为*const [T;N]
,我认为我们需要将其转换为*const T
。但是,这段代码将其转换为*const _
,并产生与使用*const T
相同的结果。_
在这里做什么?使用_
而不是显式类型是好的做法吗?
1条答案
按热度按时间umuewwlo1#
_
的意思是“从上下文中推断类型”。在这种情况下,编译器从函数的返回类型推断它是T
。关于第二个问题,一般来说,在Rust中,我们倾向于将编译器可以推断的内容留给编译器,但是对于不安全的代码,特别是因为任何错误都可能是非常危险的,我(和其他人)更喜欢显式地指定每个类型。