什么时候使用::和何时使用。在Rust中?

时间:2019-02-22 02:10:26

标签: rust

在玩Rust时,我遇到了following

extern crate chrono; // 0.4.6
use chrono::TimeZone;

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

何时在第一行中使用::,何时在第二行中使用.

1 个答案:

答案 0 :(得分:4)

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

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

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

Local.ymd相比:

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

不过,这里需要说明的一点是,Local.ymd实际上是Timezone implements特质的一部分。

这里要注意的另一件事是Local是没有字段的结构。这意味着它可以像Local或什至Local {}一样创建。