目标:为任何具有
to_string()
的类型实现特征的默认实现。
所以我的方法实际上可能是完全错误的。但我首先以这种方式问这个问题,因为它仍然是一个有趣的问题。
use core::fmt::Display
trait MyStyle<T: Display> {
fn pretty(&self) -> String {
let buf = self.to_string();
// manipulate buf
buf
}
}
上面的代码中,
self
到底是什么?我的环境(通过rust-analyzer
)只是告诉我self: &Self // size = 8, align = 0x8
。但它是什么类型?
显然这段代码不起作用,否则我就不会在这里,因为我明白了
方法
存在供参考to_string
,但不满足其特征界限。&Self
如果它说
to_string
存在,则表明 self
可能是对 Display
的一些引用,但我不明白其余部分,以及为什么它无法编译。
方法
存在供参考to_string
,但不满足其特征界限 不满足以下特征界限:&Self
Self: std::fmt::Display
措辞有点混乱。编译器不是说方法
to_string()
存在于for&Self
。这就是说方法 to_string()
存在,句号。该名称指的是实际方法。
例如,如果您改为调用
self.foo_bar_baz()
(该名称不存在)。
let buf = self.foo_bar_baz();
然后编译器会说:
在当前范围内未找到名为
的方法供参考foo_bar_baz
&Self
中找不到方法&Self
因为名为
foo_bar_baz
的方法不存在。所以这只是说to_string()
存在,与Self
无关。
然后,编译器单独说
to_string()
存在。然而,特征边界Self: std::fmt::Display
不满足。