我多次使用错误的语法,例如在本例中忘记使用let:
let closure_annotated = |value: i32| -> i32 {
temp: i32 = fun(5i32);
temp + value + 1
};errorE0658:类型归属是试验性的(见问题#23416) --> src/main.rs:3:9 \x{e 010}\c/main.rs:3:9\x{e}}\x{e76f}}\x{e76f}}\x}^
我知道这个问题是通过使用let解决的,但是“类型归属”是什么?它的用途是什么?
发布于 2016-04-03 19:30:39
类型归属是用我们希望它具有的类型对表达式进行注释的能力。锈蚀中的类型归属在RFC 803中描述。
在某些情况下,表达式的类型可能是不明确的。例如,这段代码:
fn main() {
println!("{:?}", "hello".chars().collect());
}给出以下错误:
error[E0283]: type annotations required: cannot resolve `_: std::iter::FromIterator<char>`
--> src/main.rs:2:38
|
2 | println!("{:?}", "hello".chars().collect());
| ^^^^^^^这是因为collect方法可以返回为迭代器的Item类型实现FromIterator特性的任何类型。有了类型归属,你可以写:
#![feature(type_ascription)]
fn main() {
println!("{:?}", "hello".chars().collect(): Vec<char>);
}与当前(截至Rust 1.33)消除此表达式歧义的方法不同:
fn main() {
println!("{:?}", "hello".chars().collect::<Vec<char>>());
}或者:
fn main() {
let vec: Vec<char> = "hello".chars().collect();
println!("{:?}", vec);
}https://stackoverflow.com/questions/36389974
复制相似问题