小编bet*_*ken的帖子

在 Rust 中调用泛型类型的方法

我是 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

2
推荐指数
1
解决办法
53
查看次数

标签 统计

rust ×1