您何时使用 :: 以及何时使用 .在rust?

When do you use :: and when do you use . in Rust?

本问题已经有最佳答案,请猛点这里访问。

在玩 Rust 时,我遇到了以下情况:

1
2
3
4
5
6
7
extern crate chrono; // 0.4.6
use chrono::TimeZone;

fn main() {
    println!("{}", chrono::Local::today());
    println!("{}", chrono::Local.ymd(2019, 1, 1));
}

什么时候使用::,如第一行,什么时候使用.,如第二行?


使用 . 语法调用的方法称为实例方法(或仅称为方法),而使用 :: 语法调用的方法称为关联函数。主要区别在于实例方法采用某种形式的 self 作为参数,而关联函数则没有。

您可以检查 Local::today 作为关联函数的实现:

1
2
3
pub fn today() -> Date<Local> {
    Local::now().date()
}

Local.ymd 相比:

1
2
3
fn ymd(&self, year: i32, month: u32, day: u32) -> Date<Self> {
    self.ymd_opt(year, month, day).unwrap()
}

这里需要注意的是,Local.ymd 实际上是作为 Local 实现的 Timezone 特征的一部分实现的。

这里要注意的另一件事是 Local 是一个没有字段的结构。这意味着它可以像 Local {} 甚至只是 Local.

一样创建