这对于宏来说是不可能的,原因很简单:宏不能凭空变出字段名称。
如果您愿意公开类型的详细信息,最简单的解决方案是将字段公开:
struct Circle {
pub x: i32,
pub y: i32,
pub radius: i32,
}
fn main() {
let circle = Circle { x: 3, y: 4, radius: 5 };
}
也就是说,没有need有一个构造函数,没有构造函数也能正常工作。
毕竟,如果构造函数除了传递值之外什么都不做,那么构造函数本身就毫无意义,不是吗?
如果您希望提供更短的初始化语法,您可以例如:
use std::convert::From;
impl From<(i32, i32, i32)> for Circle {
fn from(t: (i32, i32, i32)) -> Circle {
Circle { x: t.0, y: t.1, radius: t.2 }
}
}
fn main() {
let circle: Circle = (3, 4, 5).into();
}
通常,类型推断应该使您不必拼写出: Circle
.
然而,我要指出的是,这更容易出错,因为在不注意的情况下交换两个参数要容易得多。您可能想坚持使用显式名称,或者引入显式类型。