你什么时候使用::什么时候使用?在鲁斯特? [重复]

问题描述 投票:5回答:1

这个问题在这里已有答案:

在玩Rust时,我遇到了following

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

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

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

rust
1个回答
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特征的一部分实施的,Local implements

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

© www.soinside.com 2019 - 2024. All rights reserved.