Trait Bounds (Limites de Trait)

Ao trabalhar com genĂ©ricos, muitas vezes vocĂȘ exigir que os tipos implementem algum trait para poder utilizar os mĂ©todos do trait.

VocĂȘ consegue fazer isso com T:Trait ou impl Trait:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 8 minutes.
  • Tente criar um NonClonable e passĂĄ-lo para duplicate.

  • Quando vĂĄrios traits sĂŁo necessĂĄrios, use + para uni-los.

  • Mostre uma clĂĄusula where, estudantes irĂŁo encontrĂĄ-la quando lerem cĂłdigo.

    fn duplicate<T>(a: T) -> (T, T) where T: Clone, { (a.clone(), a.clone()) }
    • Organiza a assinatura da função se vocĂȘ tiver muitos parĂąmetros.
    • Possui recursos adicionais tornando-o mais poderoso.
      • Se alguĂ©m perguntar, o recurso extra Ă© que o tipo Ă  esquerda de “:” pode ser arbitrĂĄrio, como Option<T>.
  • Observe que o Rust ainda nĂŁo suporta especialização. Por exemplo, dada a função duplicate original, Ă© invĂĄlido adicionar uma especialização duplicate(a: u32).