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()
}