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)
什么时候使用::,如第一行,以及何时使用.,如第二行?
使用该语法调用的方法.称为实例方法(或简称方法),而使用该语法调用的方法::称为关联函数。主要区别在于实例方法采用某种形式的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。