我是 Rust 的新手,对泛型类型的使用有点困惑。
考虑以下场景:
我可以像这样创建一个 Date 类型:
use chrono::prelude::*;
fn main() {
let date = Utc.ymd(2021, 1, 1);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我创建一个函数foo
来做类似的事情:
use chrono::prelude::*;
fn foo<Tz: TimeZone>(date: Date<Tz>) {
let other_date = Tz.ymd(2020, 1, 1);
}
fn main() {
let date = Utc.ymd(2021, 1, 1);
foo(date);
}
Run Code Online (Sandbox Code Playgroud)
我希望Tz
被替换为Utc
,并Tz.ymd
等效于Utc.ymd
,但事实并非如此:
error[E0423]: expected value, found type parameter `Tz`
--> src/main.rs:4:20
|
4 | let other_date = Tz.ymd(2020, 1, 1);
| ^^ not a value
Run Code Online (Sandbox Code Playgroud)
这让我认为它需要先实例化?但是为什么一开始就不需要呢?我在这里误解了什么?
rust ×1