E0079

E0079#

警告名称:implicit_impl_as_method

impl Trait for Type 声明中的方法正被隐式附加到 Type。这种兼容行为不够显式,也不具备重构安全性,因此已经弃用。v0.10.4 中此警告默认关闭。

错误示例#

///|
pub(open) trait Render {
  fn render(Self) -> String
}

///|
pub(all) struct Badge(String)

///|
pub impl Render for Badge with render(self) {
  self.0
}

///|
pub fn show_badge(badge : Badge) -> String {
  badge.render()
}

修改建议#

对于需要支持点语法的方法,使用 extend Type with Trait::{method}。如果兼容方法只需在迁移期内保留,请在对应的 extend 声明上添加 #deprecated;否则以 Trait::method(value) 调用实现。

///|
pub(open) trait Render {
  fn render(Self) -> String
}

///|
pub(all) struct Badge(String)

///|
pub impl Render for Badge with render(self) {
  self.0
}

///|
pub extend Badge with Render::{render}

///|
pub fn show_badge(badge : Badge) -> String {
  badge.render()
}