<t:trait =“”>和T:Trait之间的区别

时间:2017-10-17 15:12:25

标签: rust traits

Send impl<T> Send for LinkedList<T> where T: Send, 特征中,我看到了两者

impl<T: Send> Send for LinkedList<T>

impl

这两种语法有什么区别,如果我为自己的特性编写RestTemplate tpl = new RestTemplate(); /* * http://bugs.java.com/view_bug.do?bug_id=7157360 * As long as we are using java 7 we cannot expect output for delete * */ HttpHeaders headers = new HttpHeaders(); headers.add("X-HTTP-Method-Override", "DELETE"); HttpEntity<Collection<String>> request = new HttpEntity<Collection<String>>(payload, headers); ResponseEntity<String> exchange = tpl.exchange(uri, HttpMethod.POST, request, String.class); 声明,它会对我的代码产生什么影响?

2 个答案:

答案 0 :(得分:8)

where子句中定义的特征边界是内联声明的特征边界的超集。内联样式存在于where子句之前; where条款为introduced in RFC 135

  

添加where条款,这些条款提供了更具表现力的方式   指定特征参数边界。 [...]现有的边界符号   将继续作为where条款的语法糖。

  

以下是当前边界语法的限制列表   克服了where语法:

     
      
  • 除了类型参数之外,它不能表达任何边界。因此,如果在T中有一个泛型函数,则可以编写   T:MyTrait声明T必须实施MyTrait,但您不能   写Option<T> : MyTrait(int, T) : MyTrait。这些形式较少   通常需要但仍然很重要。

  •   
  • 它不适用于关联类型。这是因为没有空间来指定关联类型的值。其他   为此目的,语言使用where子句(或类似的东西)。

  •   
  • 这很难阅读。经验表明,随着边界数量的增加,当前语法变得难以阅读和   格式。

  •   

此后,您还可以在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,这对我来说是值得的额外代码。

答案 1 :(得分:1)

where clause documentation现在包括示例:

  

当分别指定泛型类型和范围时,会更清楚:

impl <A: TraitB + TraitC, D: TraitE + TraitF> MyTrait<A, D> for YourType {}

// Expressing bounds with a `where` clause
impl <A, D> MyTrait<A, D> for YourType where
    A: TraitB + TraitC,
    D: TraitE + TraitF {}

shepmaster提到:

  

我的个人风格是始终使用where形式。
  添加新的边界时,拥有一个单一的形状(更容易git diff)对我来说是值得的额外代码行。

我同意,考虑到Git 2.23(2019年第三季度)将为其功能名称和单词增加锈迹 边界。

请参见commit 33be7b3Johannes Sixt (j6t)(2019年5月30日)。
请参见commit d74e786Marc-André Lureau (``)(2019年5月16日)。
(由Junio C Hamano -- gitster --commit a41dad4中合并,2019年6月21日)

  

userdiff:添加防锈的内置图案

     

这为非常流行的编程语言Rust添加了xfuncnameword_regex模式。
  它还包括xfuncname正则表达式(t4018)的测试用例和更新的文档。