你什么时候使用::什么时候使用?在鲁斯特?

5 rust

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

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

fn main() {
    println!("{}", chrono::Local::today());
    println!("{}", chrono::Local.ymd(2019, 1, 1));
}
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*nce 4

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

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

pub fn today() -> Date<Local> {
    Local::now().date()
}
Run Code Online (Sandbox Code Playgroud)

相比Local.ymd

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

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

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