类型和约束

单行格式

  • [T] 不带空格
  • [T; expr],例如:[u32; 42][Vec<Foo>; 10 * 2 + foo()](冒号后空格,方括号无空格)
  • *const T*mut T*后无空格,类型前有空格)
  • &'a T&T&'a mut T&mut T& 后无空格,其他单词用单个空格隔开)
  • unsafe extern "C" fn<'a, 'b, 'c>(T, U, V) -> Wfn()(关键字和符号后有空格,逗号后有空格,逗号后无空格,括号后无空格)。
  • ! 与其他类型名称一样,Name
  • (A, B, C, D)(逗号后有空格,双引号无空格,除非是单元组,否则逗号后无空格)
  • <Baz<T> as SomeTrait>::Foo::Bar 或 Foo::Bar::Foo::Bar:: 或尖括号后无空格,as 前后各有一个空格)
  • Foo::Bar<T, U, V>(逗号后有空格,逗号前无空格,尖括号前后无空格)
  • T + T + T(类型和 之间用一个空格)。
  • impl T + T + T(关键字、类型和 `+`` 之间用空格隔开)。

类型中使用的括号不要空格,例如 (Foo)

换行

尽可能避免在类型中换行。最好在最外层的范围内换行,例如,最好使用以下形式:

#![allow(unused)]
fn main() {
Foo<
    Bar,
    Baz<Type1, Type2>,
>
}

而不采用:

#![allow(unused)]
fn main() {
Foo<Bar, Baz<
    Type1,
    Type2,
>>
}

如果一个类型需要换行才能适应,本节概括了在必要时应在何处换行。

必要时,在 ; 后分隔 [T; expr]

按照函数声明的规则断开函数类型。

按照泛型的规则断开泛型类型。

断开带 + 的类型,方法是在 + 之前断开,并在随后的行中用块缩进。断开此类类型时,应在每个 + 之前断开:

#![allow(unused)]
fn main() {
impl Clone
    + Copy
    + Debug

Box<
    Clone
    + Copy
    + Debug
>
}