首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是类型归属?

什么是类型归属?
EN

Stack Overflow用户
提问于 2016-04-03 19:17:24
回答 1查看 13.1K关注 0票数 34

我多次使用错误的语法,例如在本例中忘记使用let

代码语言:javascript
复制
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解决的,但是“类型归属”是什么?它的用途是什么?

我找到了第23416期类型归属的特征门,但是我不明白“类型归属”是什么或者它的目的是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-03 19:30:39

类型归属是用我们希望它具有的类型对表达式进行注释的能力。锈蚀中的类型归属在RFC 803中描述。

在某些情况下,表达式的类型可能是不明确的。例如,这段代码:

代码语言:javascript
复制
fn main() {
    println!("{:?}", "hello".chars().collect());
}

给出以下错误:

代码语言:javascript
复制
error[E0283]: type annotations required: cannot resolve `_: std::iter::FromIterator<char>`
 --> src/main.rs:2:38
  |
2 |     println!("{:?}", "hello".chars().collect());
  |                                      ^^^^^^^

这是因为collect方法可以返回为迭代器的Item类型实现FromIterator特性的任何类型。有了类型归属,你可以写:

代码语言:javascript
复制
#![feature(type_ascription)]

fn main() {
    println!("{:?}", "hello".chars().collect(): Vec<char>);
}

与当前(截至Rust 1.33)消除此表达式歧义的方法不同:

代码语言:javascript
复制
fn main() {
    println!("{:?}", "hello".chars().collect::<Vec<char>>());
}

或者:

代码语言:javascript
复制
fn main() {
    let vec: Vec<char> = "hello".chars().collect();
    println!("{:?}", vec);
}
票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36389974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档