::和之间有什么区别?在鲁斯特?

Dan*_*Dan 5 rust

::和之间的不同感到困惑..它们看起来一样,只是它们的语法不同.

let mut guess = String::new();

io::stdin().read_line(&mut guess)
    .expect("Failed to read line");
Run Code Online (Sandbox Code Playgroud)

来自Rust编程语言的 "编程猜测游戏"

在上述情况下,我进入功能new()String.String::new()和之间有什么区别String.new()?是.只为方法呢?

Dan*_*Dan 20

::我发现和之间的一个有用的区别在方法语法.中显示。

fn当调用a 中的 a 实例时struct.使用:

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect1 = Rectangle {
        width: 30,
        height: 50,
    };

    println!(
        "The area of the rectangle is {} square pixels.",
        rect1.area()
    );
}
Run Code Online (Sandbox Code Playgroud)

另一方面,关联函数是不作为self参数的函数。他们没有以下实例struct

impl Rectangle {
    // Associated Function
    fn square(size: u32) -> Rectangle {
        Rectangle {
            width: size,
            height: size,
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

::而是用来调用这些函数。

fn main() {
    let sq = Rectangle::square(3);
}
Run Code Online (Sandbox Code Playgroud)

.用于返回方法(结构实例的函数)。


DK.*_*DK. 10

.当您在左侧有一个值时使用. ::当你有一个类型或模块时使用.

或者:.用于值成员访问,::用于命名空间成员访问.

  • String 是一个结构体,new 是一个静态方法(没有 self 作为第一个参数),因此您可以通过 `::` 访问它。io 是一个命名空间,您可以在其中使用 `::` 访问内部“事物”(结构、特征等)。 (3认同)
  • @丹:我不确定你在问什么。String :: new()正在调用由String类型定义的函数。调用任何其他函数都没有什么不同。io :: stdin()返回值,因此.read_line查找并调用由Stdin类型定义的read_line方法。与调用“裸露”功能不同的唯一方法是,将`.`(Stdin`)左侧的东西作为self参数传递给read_line。而且“对象”是如此“隐藏”地超载,以至于我无法真正回答。这取决于您所说的“对象”。 (2认同)
  • 从 C# 到 Rust,这几乎就像实例成员和静态成员一样,“.”意味着调用类型的实例成员,而“::”就像访问类型的静态成员。Rust 中类型的实例方法看起来类似于 C# 中的扩展方法“public static void Foo(this MyType myType)”与 Rust 中的“fn foo(&self)”。如果我错了,请纠正我,但我认为这个类比可以帮助像我这样第一次尝试 Rust 的 C# 开发人员。 (2认同)