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

Tii*_*ino 4 syntax types rust

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

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

C++风格:

class Foo {
    public:
        int get_bar();
    private:
        int _bar;
}
Run Code Online (Sandbox Code Playgroud)

铁锈风格:

struct Foo {
    bar: i8,
}

impl Foo {
    pub fn bar() -> i8 {
        bar
    }
}
Run Code Online (Sandbox Code Playgroud)

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

She*_*ter 8

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

在 Rust 中,您可以在原始实现代码不知道的情况下实现类型的特征。这需要有用于与数据定义分开实现特征的语法。一旦存在该要求,即使在单个文件中,普遍使用相同的语法也不会那么混乱。

板条箱 1:

struct Foo;
Run Code Online (Sandbox Code Playgroud)

板条箱 2:

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

impl Price for crate1::Foo {
    fn price(&self) -> u8 {
        42
    }
}
Run Code Online (Sandbox Code Playgroud)

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

也可以看看:

  • C# 具有扩展方法,同时遵循与 Java 相同的类/方法风格。 (2认同)