这个问题在这里已有答案:
在玩Rust时,我遇到了following:
extern crate chrono; // 0.4.6
use chrono::TimeZone;
fn main() {
println!("{}", chrono::Local::today());
println!("{}", chrono::Local.ymd(2019, 1, 1));
}
什么时候使用::
,如第一行,什么时候使用.
,如第二行?
使用.
语法调用的方法称为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
特征的一部分实施的,Local
implements。
另外需要注意的是Local
是一个没有字段的结构。这意味着它可以像Local {}
甚至只是Local
一样创建。