21 Matching Annotations
  1. Apr 2023
    1. 方法和关联函数
      • 它们都是定义在impl实现块中的函数。
      • 方法,指第一个参数是self或其变体的函数,它由类型实例调用。
      • 关联函数,指实现块中定义的非方法的函数。调用时需要指定类型作用域。通常用于定义构造器函数,即返回值类型为实现类型的函数。
  2. Mar 2023
    1. 使用特征作为函数返回值
      • 不同分支返回同一类型,使用trait实现类型 impl Trait
      • 不同分支返回不同类型,使用trait对象,即trait指针,Box<dyn Trait>
    2. 🌟🌟🌟
      • Foo 需要实现减法trait
      • FooBar、BarFoo 需要添加注解 #[derive(Debug, PartialEq, PartialOrd)],使相等断言宏可以运行。
    3. 运算符仅仅是特征方法调用的语法糖
      • 运算符特征,都自带一个关联类型Output,表示运算的结果类型。
      • 使用impl实现运算符特征时,通过类型别名的方式指定具体类型。type Output = FooBar;
      • 当用于类型参数约束时,需要给Output设置具体类型。在特征名后面尖括号中使用等号赋值。ops::Mul<Output=T>
    4. 使用 #[derive] 属性来派生一些特征
      • #[derive(PartialEq, PartialOrd)] 使类型可以被比较大小
      • #[derive(Debug)] 使类型可以被打印
    5. Trait
      • trait中默认有一个关联类型Self ,指代实现者的类型。具体类型在实现trait时,需要使用实现类型替换Self类型。
      • trait中定义的方法,可以提供默认实现。
      • 使用trait作用域调用构造方法创建实例时,需要显式的标实例变量的类型。
    1. map & and_then

      用于进一步处理Result值。

      它们都对Ok内部值应用一个闭包,对Err值保留。

      区别在于,对于闭包返回值: * map,会自动将其包装为Result::Ok类型; * and_then,不会。

      code: * result.and_then(|value| value + 2),结果为内部值的类型。 * result.map(|value| value + 2),结果为Result类型。

    2. ? 跟 unwrap

      对于一个Result实例,使用 ? 和 unwrap 都能展开它的值。 区别在于,当遇到错误实例时, ?会将错误返回。 unwrap 会调用panic。

      此外,?其实是返回错误的简写形式。

      ? 可以链式调用。