我已经学习了两种在Rust中调用方法的方法.
第一种方法称为static methods,它不需要实例,可以直接使用 struct 调用.
第二种方法称为instance methods,它需要一个对象实例来调用它.
而这两种方法的区别在于第一个参数是否为self
.
示例:
struct User {
name: String,
}
impl User {
//static method
fn new(name: String) -> Self {
User { name }
}
//instance method
fn get_name(&self) -> String {
self.name
}
}
但我发现一些方法可以这样调用:
use chrono::Local;
use chrono::TimeZone;
fn main() {
let time = Local.with_ymd_and_hms(2024, 1, 26, 15, 0, 0).unwrap();
println!("{}", time.format("%F %T"));
}
我不明白with_ymd_and_hms
在TimeZone
中的定义如下:
fn with_ymd_and_hms(
&self,
year: i32,
month: u32,
day: u32,
hour: u32,
min: u32,
sec: u32,
) -> LocalResult<DateTime<Self>> {
它应该是一个instance method.但是为什么它可以被称为Local.with_ymd_and_hms
呢?
如果有人能帮上忙,我将不胜感激.