可以用相同的名称制作一个结构和一个函数。这对于创建没有::new()
样板的结构可能很有用。例如:
#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
fn Point(x: i32, y: i32) -> Point {
Point { x, y }
}
fn main() {
let point = Point(1, 2);
println!("{:?}", point);
}
::new()
一起使用? 是,it is possible(输出):
Point { x: 1, y: 2 }
是的,这是不好的风格。不仅使您导入结构Point
或具有相同名称的函数都感到困惑,而且还违反了通用命名约定:
warning: function `Point` should have a snake case name
--> src/main.rs:7:4
|
7 | fn Point(x: i32, y: i32) -> Point {
| ^^^^^ help: convert the identifier to snake case: `point`
|
= note: `#[warn(non_snake_case)]` on by default
否,您应该使用::new()
或将字段设为公开,以便用户可以像这样构建它:
let point = Point { x: 1, y: 2 };
而且,不会很快删除它,因为它只是样式/设计问题,不会以任何有意义的方式影响Rust。无论如何,人们不会喜欢您什么时候做,因为这与我们都遵循的使第三方库更容易集成的通用准则相反。
如果您只是想拥有一个命名元组,那么请改用命名元组结构:
#[derive(Debug)]
struct Point(i32, i32);
fn main() {
let p = Point(1, 2);
println!("{:?}", point); // Point(1, 2)
}