::和的区别是什么?在Rust中?

时间:2018-08-08 00:21:19

标签: rust

我对::.之间的差异感到困惑。它们的外观相同,只是语法不同。

let mut guess = String::new();

io::stdin().read_line(&mut guess)
    .expect("Failed to read line");

"Programming a Guessing Game" from The Rust Programming Language

在上述情况下,我访问了new()中的函数StringString::new()String.new()有什么区别? .仅适用于方法吗?

2 个答案:

答案 0 :(得分:8)

.用于左侧的值。当您拥有类型或模块时,将使用::

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

答案 1 :(得分:0)

copy()中显示了::.之间有用的区别。

fn中调用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()
    );
}

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

impl Rectangle {
    // Associated Function
    fn square(size: u32) -> Rectangle {
        Rectangle {
            width: size,
            height: size,
        }
    }
}

::用来调用这些函数。

fn main() {
    let sq = Rectangle::square(3);
}

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