Rust:具有相同名称的结构和函数

问题描述 投票:0回答:1

可以用相同的名称制作一个结构和一个函数。这对于创建没有::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()一起使用?
  • 是否有计划弃用此功能?
function struct rust naming-conventions naming
1个回答
0
投票

是,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)
}
© www.soinside.com 2019 - 2024. All rights reserved.