今天我在这里遇到了一个有点奇怪的语法 - where ()
:
https ://github.com/binator/self/tree/80ba2ade?tab=readme-ov-file#example
fn hex_primary<Stream, Context>(stream: Stream) -> Parsed<u8, Stream, Context>
where
(): IntRadixParse<Stream, Context, u8>,
{
uint_radix(2, Radix::HEX).parse(stream)
}
在我看来,它看起来像是“绑定在单元类型(又名空元组)上”,但我无法理解。单元类型默认不会实现所有特征,对吗?不幸的是,官方文档太模糊,不够完整(同时过于冗长),我在其中找不到任何相关内容。
原始 RFC 的 forwhere
子句也提到了这种语法,但没有适当的解释:
https://rust-lang.github.io/rfcs/0135-where.html#alternatives
fn increment<T>(c: T) -> T
where () : Add<int,T,T>
{
1 + c
}
但除此之外,我知道不仅可以在特征泛型中指定此类界限。
那么它是什么,何时使用,为什么需要它以及它解决了哪些问题?