类型和边界
单行格式
[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)
换行
尽可能避免在类型中换行。优先在外层作用域换行,例如,优先
#![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 > }