在医生们的Send特性中,我看到了两者
impl<T> Send for LinkedList<T>
where
T: Send, 和
impl<T: Send> Send for LinkedList<T>这两种语法之间有什么区别,如果我为自己的特性编写impl声明,它将如何影响我的代码?
发布于 2017-10-17 15:22:30
在where子句中定义的特征边界是内联声明的特征边界的超集。内联样式存在于where子句之前;where子句为在RFC 135中引入
添加
where子句,它提供了一种更有表现力的方法来指定特征参数边界。..。现有的界表示法仍然是where子句的语法糖。下面列出了使用where语法克服的当前边界语法的限制:
T中有一个通用函数,可以编写T:MyTrait来声明T必须实现MyTrait,但不能编写Option<T> : MyTrait或(int, T) : MyTrait。这些表格并不常见,但仍然很重要。从那时起,您还可以在一个for <'a> ...子句中使用更高级别的特征界限( where ):
fn foo<T, U>()
where
// higher-ranked trait bounds
for<'a> T: SomethingElse<'a>,
// Bound not directly on the generic type
i32: From<U>,
T: Iterator,
// Bound on an associated type
T::Item: Clone,
// Just really long
U: ReallyLong + AnotherReallyLong + WowReallyLong,
{}如果您的需求可以通过内联特性边界来满足,那么您的代码就不会受到影响。如果您需要只有where启用的额外能力,那么您需要使用where。
另请参阅:
我个人的风格是总是使用where表单。对于我来说,在添加新的边界时,拥有一个更易于git diff的单一形状是值得的。
https://stackoverflow.com/questions/46793494
复制相似问题