类型和约束

单行格式

  • [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)

换行

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

Foo< Bar, Baz<Type1, Type2>, >

而不采用:

Foo<Bar, Baz< Type1, Type2, >>

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

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

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

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

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

impl Clone + Copy + Debug Box< Clone + Copy + Debug >