簡體   English   中英

Rust:一個結構體和一個同名的函數

[英]Rust: a struct and a function with the same name

可以創建同名的結構體和函數。 對於創建沒有::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。 無論如何,人們不會喜歡你何時這樣做,因為它與我們都遵循的使第三方庫的集成更容易的一般准則相反。


如果您只想擁有一個命名元組,那么請改用命名元組結構:

#[derive(Debug)]
struct Point(i32, i32);

fn main() {
    let p = Point(1, 2);
    println!("{:?}", point); // Point(1, 2)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM