我想在概念上做一些像这样的事情:
let fun: fn(&mut _) -> Result<u32> = ReadBytesExt::read_u32::<BigEndian>;
但是这不起作用,因为Rust认为我试图用ReadBytesExt::read_u32
作为类型arg并且没有其他arg来调用BigEndian
。 (我得到错误的args错误数量。)
所以我该怎么做,看起来像是锈类型系统应该允许的东西,因为我试图更具体。
答案 0 :(得分:1)
值不能也永远不能包含绑定泛型;由于单态化的作用,这个概念根本无法实现。
这样的事情需要用这样的包装函数来完成:
fn read_u32_be<R: Read>(&mut r: R) -> byteorder::Result<u32> {
r.read_u32::<BigEndian>()
}