E4018

E4018#

无法为给定类型解析特征。

错误示例:#

///|
trait HasDefault {
  f(Self) -> Unit = _
}

///|
impl HasDefault with f(_) {

}

///|
struct S(Int)

///|
test {
  let s : S = S(3)
  let _ = Show::to_string(s)
  HasDefault::f(s)
}

在上述例子中,试图在类型 S 上调用 Show 特征的方法 to_string 以及 HasDefault 特征的方法 f,但由于 S 没有实现这些特征,会有如下错误:

Type S does not implement trait Show: no `impl` is defined
Type S does not implement trait HasDefault: no `impl` is defined

提示

对于一个所有方法均有默认实现的特征,依然需要一个显示的实现声明。

建议#

给类型 S 实现 Show 特征和 HasDefault 特征:

///|
impl HasDefault for S

///|
impl Show for S with output(s, logger) {
  s.0.output(logger)
}