我可以做这个:
let a: [f32; 3] = [0.0, 1.0, 2.0];
Run Code Online (Sandbox Code Playgroud)
但为什么这不起作用?
let a: [f32; _] = [0.0, 1.0, 2.0];
Run Code Online (Sandbox Code Playgroud)
在我看来,长度是多余的和微不足道的推断.有没有办法避免必须明确指定它?(而且不必附加f32
到所有文字.)
Fra*_*gné 21
_
只能在两个上下文中使用:在模式中,匹配要忽略的值,以及作为类型的占位符.在数组类型中,长度不是类型,而是表达式,_
不能在表达式中使用.
但是,您可以执行的操作f32
仅附加到其中一个文字中,并完全省略该类型.由于数组的所有项必须具有相同的类型,因此编译器将推断出数组的正确元素类型.
let a = [0.0f32, 1.0, 2.0];
Run Code Online (Sandbox Code Playgroud)
现在可以在每晚使用该generic_arg_infer
功能,对于类型和初始化程序:
#![feature(generic_arg_infer)]
let _arr: [f32; _] = [0.0, 1.0, 2.0];
let _arr: [f32; 3] = [0.0; _];
Run Code Online (Sandbox Code Playgroud)
小智 6
从 1.39 开始可以使用简单的宏
macro_rules! arr {
($id: ident $name: ident: [$ty: ty; _] = $value: expr) => {
$id $name: [$ty; $value.len()] = $value;
}
}
Run Code Online (Sandbox Code Playgroud)
用法
arr!(static BYTES: [u8; _] = *b"foo");
arr!(let floats: [f32; _] = [0., 1.]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
389 次 |
最近记录: |