类型和约束
单行格式
[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) -> W
或fn()
(关键字和符号后有空格,逗号后有空格,逗号后无空格,括号后无空格)。!
与其他类型名称一样,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
>