来自ColorizeTrait doc,String并没有实现它(而 &str 实现了它)。
fn blue(self) -> ColoredString
where
Self: Sized,
Run Code Online (Sandbox Code Playgroud)
但为什么String类型可以调用它的方法呢?
use colored::Colorize;
fn main() {
let blue = "blue".to_owned().blue();
println!("{}", blue);
}
Run Code Online (Sandbox Code Playgroud)
编辑
[未解决]怎样才能脱糖呢?(具体来说,要弄清楚是否发生了自动取消引用)
幕后发生了什么?
对方法调用进行类型强制。String可以被&str强迫&*String
该特征Colorize是为 实现的&'a str,并String实现Deref<Target=str>。
Rust 方法调用规则意味着该值可能会自动被借用或取消引用。
这意味着对于我们的方法调用String,Rust 将寻找具有以下类型之一作为接收器类型的方法
String&String&mut Stringstr(由德雷夫)&str(这个让方法调用起作用)&mut str由于String只是借用,打电话后即可使用.blue()
use colored::Colorize;
fn main() {
let x = "hello".to_string();
let y = x.blue();
println!("{}", x);
println!("{}", y);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |