有没有办法直接在表达式中编写类型注释,例如在使用时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)
但这些都不是有效的语法.
这目前在标准库中使用辅助函数完成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)