为什么我必须在Rust中的struct之外声明方法?

Jan*_*kke 2 methods struct rust

为什么在结构外部创建方法?

在像C#这样的语言中,您可以在结构中添加方法.我知道在C和C++这样的语言中你有头文件所以它有意义,但据我所知,我不能在Rust中创建头文件.

Sog*_*omn 9

在大多数语言中,"方法"只是一些语法糖.你实际上没有一个对象并调用它的方法,你有一个函数,它接受对该对象的引用,然后用它做东西.与常规函数相比,使用点表示法隐式传递对象的引用.

struct Foo {
    //...
}

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

所以这样称呼它

my_foo.do_something();
Run Code Online (Sandbox Code Playgroud)

基本上是一样的

Foo::do_something(&my_foo);
Run Code Online (Sandbox Code Playgroud)

我认为Rust开发人员做出的决定是让结构更加清晰,结构只不过是一组数据.

这也是允许现有类型的特征实现的原因.