generics - rust:预期的类型参数,找到的结构

标签 generics struct types rust

<分区>

我编写了一些函数来为各种 TimeZone 的 T 计算一些日期时间(来自 chrono)。这些函数的主要区别仅在于返回值的类型 DateTime<Utc>。 , DateTime<Local> ETC。 我想知道是否可以使用类似

的泛型来概括这一点

fn event<T: TimeZone>() -> DateTime<T>

而不是单独的函数

fn event_local() -> DateTime<Local>

fn event_local() -> DateTime<Utc>

...

试图把它放在通用版本中,我得到了错误 “期望的类型参数,找到的结构” 我理解这个错误,但我想知道是否有办法规避它,因为用几乎相同的逻辑实现多个功能是很乏味的。

extern crate chrono;

use chrono::{TimeZone, DateTime, Local};

fn event() -> DateTime<Local> {
    Local.ymd(2019,8,13).and_hms(17, 30, 0)
}

fn event_utc() -> DateTime<Local> {
    Utc.ymd(2019,8,13).and_hms(17, 30, 0)
}

有效,而

fn event<T: TimeZone>() -> DateTime<T> {
    Local.ymd(2019,8,13).and_hms(17, 30, 0)
}

没有编译出现上述错误。

查看问题 How to return an instance of a trait? ,建议使用 Box,但我不知道该怎么做。如果有人能帮助我,我将不胜感激。谢谢!

最佳答案

正如我正确理解的那样,您想创建一个通用函数来为不同的时区调用 ymd()

这里是一个适用于这种情况的通用函数的工作示例:

fn event<T: TimeZone>(s: T) -> DateTime<T> {
    s.ymd(2019,8,13).and_hms(17, 30, 0)
}

要调用该函数,请使用:

event::<Local>(Local);

关于generics - rust:预期的类型参数,找到的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57473557/

相关文章:

Java 泛型枚举子类型化接口(interface)

java - 使用通用将 x 元素从 map 复制到另一个 map

c# - C# 中是否可能进行部分泛型类型推断?

java - 自动装箱/自动拆箱不适用于有界类型参数

java - 为什么使用类型替换

vb.net - 您可以将 "type"作为参数传递吗?

java - 继承方法返回引用类型

c - 使用指向从函数返回的结构的指针

c++ - 读取文件以构造具有多种成员类型

c - 将结构数组放入UNIX的共享内存中,以便客户端程序可以访问它