代码之家  ›  专栏  ›  技术社区  ›  Willem

我可以将deref用作方法链的一部分吗?

  •  -1
  • Willem  · 技术社区  · 9 月前

    有什么方法可以使用deref运算符吗 * 作为方法链的一部分?

    例如

    let replacement_numbers = HashMap::from([
        ("one", "1"),
        ("two", "2"),
        ("three", "3"),
    ]);
    
    let number: &str = "one";
    let default_number: &str = "0";
    
    let replacement = replacement_numbers // <-- HashMap<&str, &str>
        .get(number)  // <-- Option<&&str>
        .unwrap_or(&default_number)  // <-- &&str
        .to_digit(10) // <-- does not work on &&str, only &str!
        .expect("Should be a number!");
    

    我需要以某种方式取消引用 &&str 变成 &str 在我打电话之前 to_digit(10) 上。有可能在方法调用中做到这一点吗?我试着使用 .deref() 但这并不奏效。

    1 回复  |  直到 9 月前
        1
  •  3
  •   ShadowRanger    9 月前

    如果 str 定义 to_digit ,就像Rust一样 dereference repeatedly to find a method 。问题是, 到数字(_D) 是上的方法 char str .

    对于 &str &&str &&&str ,等等),您可以使用 .parse() (可能是注释 replacement 或使用涡轮鱼来指定类型),或使用 from_str_radix 各种基元类型的函数,例如。 u32::from_str_radix .