gpt4 book ai didi

rust - 为什么可以在 String 上调用 Colorize trait 方法,而 String 不实现 Colorize

转载 作者:行者123 更新时间:2023-12-05 09:31:08 25 4
gpt4 key购买 nike

来自 Colorize 特征 doc , String 不暗示它(而 &str 暗示它)。

fn blue(self) -> ColoredString
where
Self: Sized,

但是为什么String类型可以调用它的方法呢?

use colored::Colorize;

fn main() {
let blue = "blue".to_owned().blue();
println!("{}", blue);
}


编辑

  • [未解决] 我该如何脱糖? (具体来说,找出自动取消引用正在发生)

  • 幕后发生了什么?

方法调用的类型强制。 String 可以通过 &*String

强制转换为 &str

最佳答案

性状 Colorize&'a str 实现, 和 String工具 Deref<Target=str> .

Rust 方法调用规则意味着该值可能会自动借用或取消引用。

这意味着我们的方法调用 String , Rust 将寻找一些具有以下类型之一的方法作为接收者类型

  • String
  • &String
  • &mut String
  • str (通过取消引用)
  • &str (这个让方法调用起作用)
  • &mut str

String只是借用,调用.blue()后即可使用

use colored::Colorize;

fn main() {
let x = "hello".to_string();
let y = x.blue();

println!("{}", x);
println!("{}", y);
}

link to rust reference regarding how method calls are resolved

关于rust - 为什么可以在 String 上调用 Colorize trait 方法,而 String 不实现 Colorize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69082202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com