为什么 Rust 在语法上将类型的数据定义与函数和方法实现分开?

Why does Rust syntactically separate the data definition of a type from function and method implementations?

C++ 和 Java 等面向对象的语言使用对象来定义特定数据的行为。因为它们的含义密切相关,所以它们在相同的上下文中声明:class.

Rust 选择在语法上将它们分开。

C++ 风格:

class Foo {
    public:
        int get_bar();
    private:
        int _bar;
}

铁锈风格:

struct Foo {
    bar: i8,
}

impl Foo {
    pub fn bar() -> i8 {
        bar
    }
}

Rust 不是一种面向对象的语言吗?

在 C++ 或 Java 等语言中,类型实现的方法集在定义类型时是固定的。这意味着一个句法结构足以表达两个相关概念。

在 Rust 中,您可以在原始实现代码不知道的情况下为类型实现特征。这 要求 存在用于实现与数据定义分开的特征的语法。一旦存在该要求,即使在单个文件中也可以通用地使用相同的语法,从而减少混淆。

板条箱 1:

struct Foo;

板条箱 2:

trait Price {
    fn price(&self) -> u8;
}

impl Price for crate1::Foo {
    fn price(&self) -> u8 {
        42
    }
}

此外,为同一类型实现多个特征可能会导致方法名称冲突。将每个特征的实现分离到一个单独的语法块中,清楚地消除了正在实现的方法的歧义。

另请参阅: