myTreeNode{myNode.node.Left} 为什么要用myTreeNode包一下呢

来源:4-3 扩展已有类型

Beebop

2020-03-15

func (myNode *myTreeNode) postOrder() {
	if myNode == nil || myNode.node == nil {
		return
	}

	left := myTreeNode{myNode.node.Left}
	right := myTreeNode{myNode.node.Right}

left := myTreeNode{myNode.node.Left}
right := myTreeNode{myNode.node.Right}
里面为什么会有myTreeNode{}包一下这个是什么意思?是myTreeNode的初始化吗?可是myNode不是已经是myTreeNode了吗。这个涉及到什么语法点呢

写回答

1回答

ccmouse

2020-03-15

myNode.node.Left的类型是tree.Node,不是myTreeNode。不包一下的话后续代码会编译错误。
编译器的好处就是如果写错他会报出来。
"包一下"的原理就是我这个myTreeNode里面的字段就是tree.Node,这里用myNode.node.Left初始化一个新的myTreeNode,然后就可以调用myTreeNode的函数

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程