在玩Rust时,我遇到了following:
extern crate chrono; // 0.4.6
use chrono::TimeZone;
fn main() {
println!("{}", chrono::Local::today());
println!("{}", chrono::Local.ymd(2019, 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 {}
一样创建。