rust:具有泛型的特质中的 self 是什么?

问题描述 投票:0回答:1

目标:为任何具有

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
的一些引用,但我不明白其余部分,以及为什么它无法编译。

rust traits
1个回答
0
投票

方法

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
不满足。

© www.soinside.com 2019 - 2024. All rights reserved.