【发布时间】:2017-11-18 08:27:43
【问题描述】:
我正在尝试创建一个如下所示的结构:
struct MediaLibrary<B>
where
B: Ord,
{
root_dir: PathBuf,
item_meta_fn: String,
self_meta_fn: String,
media_item_filter: fn(&Path) -> bool,
media_item_sort_key: fn(&Path) -> B,
}
最后两个字段分别用作测试给定路径是否为有效媒体文件的谓词,并对路径向量进行排序(使用sort_by_key)。
但是,就像现在一样,设计不灵活:两个函数都固定为只接受Path。我希望能够使用 P: AsRef<Path> 作为 stdlib 用于其许多文件和路径方法的方法,但我不知道如何添加它。
我impl 为MediaLibrary 使用的许多方法已经在使用P: AsRef<Path> 作为它们的论点,所以我的直觉告诉我会有冲突。
【问题讨论】:
-
为什么它们必须是函数指针而不是闭包?
-
嗨,Shep,他们没有理由这样做!我不熟悉闭包的类型定义,那些是
Fn/FnMut/FnOncetrait? -
没错,函数指针本身就实现了这些特征,因此它们可以在同一个地方使用。但是,我不确定是否真的能解决您的问题。
-
我错过了什么棘手的问题吗?似乎我需要在
where中使用where,例如:media_item_filter: F where F: Fn(P) -> bool; where P: AsRef<Path>