Rust:一个结构体和一个同名的函数

用户9363390

可以创建同名的结构体和函数。这对于创建没有::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()
  • 是否有计划弃用此功能?
用户12863668

是的,这是不好的风格。它不仅会使您导入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)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何在 Swift 中有一个变量和一个同名的函数

发送一个结构体和一个整数

构建一个内部有结构体的结构体

为什么我不能在 Chrome 中声明一个与函数体同名的 let 变量

函数接受一个const结构和cin推荐

如何在Rust中将一个结构映射到另一个结构?

复制一个结构体以传递给函数-该字段未实现`Copy`

创建一个结构体作为枚举类成员

一个结构体可以有多个名字吗?

设置一个指向结构的指针等于一个函数返回的另一个结构的指针?

ts 一个同时是一个函数和一个属性的类型

如何使用参数将一个函数从一个结构传递到另一个结构中的另一个函数

用一个结构写一个结构

映射一个结构体数组,从一个 var 中过滤它们,然后提取这个结构体的另一个 var

将结构体指针转换为另一个结构体

是否可以在Rust中将一个结构的内存与另一个结构相关联?

如何在Rust中编写一个通用函数,该函数可以接受实现特定属性的任何结构?

如何编写一个带迭代器的Rust函数?

如何编写一个可以读写缓存的 rust 函数?

WCF 服务有一个参数化的构造函数,它接受一个结构

是否有一个python结构是伪函数?

在另一个结构上访问函数

Bigquery temporay 函数返回一个结构

定义一个只包含函数的 QML 结构

在同一个程序包中使用相同名称区分结构

从另一个JS文件和节点目录结构调用函数

Haskell - 编写一个在 Trie 结构中搜索和计数的函数

查找数组的第一个和最后一个结构

我可以通过其基类的默认构造函数实例化一个结构体吗?