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

标签 function struct rust naming-conventions naming

可以使结构和函数具有相同的名称。这对于创建没有::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()还是与它一起使用?
  • 是否有计划弃用此功能?
  • 最佳答案

    是的,这是不好的风格。无论是导入struct 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。无论如何,人们不会喜欢您什么时候做,因为这与我们都遵循的通用准则相反,这些准则使第三方库的集成更加容易。

    如果您只是想拥有一个命名元组,那么请改用命名元组struct:
    #[derive(Debug)]
    struct Point(i32, i32);
    
    fn main() {
        let p = Point(1, 2);
        println!("{:?}", point); // Point(1, 2)
    }
    

    关于function - Rust:具有相同名称的结构和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60127141/

    相关文章:

    python - 编写一个测试程序,每行打印从 1 到 Z 的十个字符

    r - 在自定义函数中对 data.cube 进行子集化

    c - 这些 C 程序中的位域是如何工作的?

    Go vs Rust 垃圾收集器性能和类型

    io - 如何正确读取文本文件?

    rust - Rust提示通用参数不满足特征界限,即使它不是必需的

    javascript - 用户将学生成绩输入到文本框输出中,然后计算最终的字母成绩

    c++ - 使用函数创建数组 - Objective-C++

    c++ - 使用函数调整动态结构数组的大小

    c - GBDK C 中 typedef 结构的前向声明