Rust 中的 `where ()` 是什么?

问题描述 投票:0回答:1

今天我在这里遇到了这种语法:
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 for

where
子句也提到了这个语法,但没有正确的解释:
https://rust-lang.github.io/rfcs/0135-where.html#alternatives

fn increment<T>(c: T) -> T
    where () : Add<int,T,T>
{
    1 + c
}

但除此之外,我知道这样的界限不仅可以在特征泛型中指定。
那么它是什么,什么时候使用,为什么需要它,它解决哪些问题?

generics rust syntax traits unit-type
1个回答
0
投票

是的,这是单位类型的限制。

单位类型并没有实现许多有用的特征(尽管它确实实现了一些,例如

Debug
),但是在 Rust 中,你可以实现外来类型的特征,只要该特征是你自己的,或者在有限的情况下,即使该特征不是你的,但它的一些通用参数是。所以这个库可能定义了
IntRadixParse
类型,并为单位类型实现它。

© www.soinside.com 2019 - 2024. All rights reserved.