【发布时间】:2017-10-16 21:22:18
【问题描述】:
我正在学习 Rust,并进入了关于 trait bounds 的章节。在那一章中,他们给出了一个使用+(加号)运算符的示例,用于在where 子句中枚举所有必需的特征。
Rust 中的特征还允许使用哪些其他运算符?我进行了搜索,但找不到任何有关此的文档。 Rust 是否支持“或”表示法、括号、否定?
【问题讨论】:
标签: rust traits method-signature type-signature
我正在学习 Rust,并进入了关于 trait bounds 的章节。在那一章中,他们给出了一个使用+(加号)运算符的示例,用于在where 子句中枚举所有必需的特征。
Rust 中的特征还允许使用哪些其他运算符?我进行了搜索,但找不到任何有关此的文档。 Rust 是否支持“或”表示法、括号、否定?
【问题讨论】:
标签: rust traits method-signature type-signature
'或'符号
没有。这样的事情对我来说没有意义——如果可以是 A 或 B,代码会做什么?
括号
不,除非你算上 Fn(...) 和朋友中的括号,使用尖括号作为泛型 (Vec<T>) 或在切片中使用方括号 ([u8]),但这些都是类型的一部分。
再一次,这样的请求对我来说没有意义,你为什么需要任何类型的分组?
否定
没有。我相信这是因为处理否定逻辑会使事情变得更加复杂。
其他运营商
There's the ? (question mark) bound.
来源:我写过a parser of Rust code。虽然我可能遗漏了一些东西,但它解析了我扔给它的所有 ~37500 个 Rust 文件,所以它非常适合。
【讨论】:
?(问号)仅适用于特定特征Sized。对于人体工程学,每个泛型类型都有一个隐含的T: Sized 绑定除非您使用?Sized 删除该默认绑定。
fn print_related_stuff<A, B>(a: A, b: B){ print(a.to_string(), b.to_string()) } 这样的函数。如果您希望编译器在函数中不只允许任何 Stringable 类型,而是只允许在几种可能关系中的任何一种中相关的类型,那么像 where A:Stringable, B:Stringable, (A == B or (A: ISomething and B: ISomethingElse)) 这样的 where 子句对我来说很有意义跨度>
or 的东西。想要拥有一个具有超级特性 BitOrBitOr,或者可以在使用整数表达式实现我的特征的类型上完成(其类型 i32、i64 等将被自动推断)。续……