为了账号安全,请及时绑定邮箱和手机立即绑定

以另一个形式实现一个接口

以另一个形式实现一个接口

Go
繁花如伊 2021-04-29 17:19:00
我希望实现fmt.Stringer接口的String方法。但是,对于从派生的一组类型Node,其实String现将是Print必须提供的接口方法的包装。如何String为所有类型的实现自动提供Node?如果我String在某些基类上提供了默认值,那么我将无法访问派生类型(因此也无法访问接口方法Print)。type Node interface {    fmt.Stringer    Print(NodePrinter)}type NodeBase struct{}func (NodeBase) String() string {    np := NewNodePrinter()    // somehow call derived type passing the NodePrinter    return np.Contents()}type NodeChild struct {    NodeBase    // other stuff}func (NodeChild) Print(NodePrinter) {    // code that prints self to node printer}
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

Go明确声明不可能:


当我们嵌入一个类型时,该类型的方法成为外部类型的方法,但是当调用它们时,该方法的接收者是内部类型,而不是外部类型。


对于解决方案,我建议这样的事情:


func nodeString(n Node) string {

    np := NewNodePrinter()

    // do stuff

    n.Print(np)

    return np.Contents()

}


// Now you can add String method to any Node in one line

func (n NodeChild) String() string { return nodeString(n) }


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 225 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信