2017-03-24 84 views
1

爲什麼在結構之外創建方法?爲什麼我必須在Rust中的結構之外聲明方法?

在像C#這樣的語言中,您可以在結構中添加方法。我知道在像C和C++這樣的語言中,你有頭文件,所以它是有道理的,但據我所知我無法在Rust中創建頭文件。

+1

這使您可以爲您未定義的類型提供用戶定義特徵的實現。這意味着結構上的「方法」集合甚至可以在定義該結構的文件之外增長。 – Alec

回答

8

在大多數語言中,「方法」只是一些語法糖。你實際上沒有一個對象並且調用它的方法,你有一個函數引用了那個對象,然後用它做了一些事情。與常規函數不同,對象的引用通過使用點符號隱式傳遞。

struct Foo { 
    //... 
} 

impl Foo { 
    fn do_something(self: &Self) { //"self: &Self" is a more verbose notation for "&self" 
     //... 
    } 
} 

所以調用它像這樣

my_foo.do_something(); 

在本質上是一樣的

Foo::do_something(&my_foo); 

我認爲這是除鏽開發者做出了一個決定,使之更清楚的是,結構是沒有別的不只是一組數據。

這也是允許trait執行已有類型的東西。

相關問題