表达式中是否存在类型注释的语法?(示例用例:默认特征)

blu*_*e10 3 rust

有没有办法直接在表达式中编写类型注释,例如在使用时Default::default()

例如,在以下示例中,编译器显然无法推断类型:

use std::default::Default;

#[deriving(Default, Show)]
struct Point{ x: int, y: int };

println!("Default Point: {}", Default::default())
Run Code Online (Sandbox Code Playgroud)

我发现的唯一解决方案是通过在LHS上注释附加let绑定的类型.

let p: Point = Default::default();
println!("Default Point: {}", p)
Run Code Online (Sandbox Code Playgroud)

我希望能以某种方式直接告诉编译器,Default::default()我想要哪个版本.也许是这样的:

println!("Default Point: {}", Default::default() as Point)
println!("Default Point: {}", Default::default<Point>())
println!("Default Point: {}", Default<Point>::default())
println!("Default Point: {}", Point::default())
Run Code Online (Sandbox Code Playgroud)

但这些都不是有效的语法.

Lev*_*ans 5

这目前在标准库中使用辅助函数完成from_str.

基本思想是使用函数允许您引入一个类型参数,然后可以使用,如下所示:

use std::default::Default;

#[deriving(Default, Show)]
struct Point{ x: int, y: int }

fn default<T: Default>() -> T { Default::default() }

fn main() {
    println!("Default Point: {}", default::<Point>());
}
Run Code Online (Sandbox Code Playgroud)