我正在创建一个简单的排序二叉树,它是不可变的(它应该表现得像它的不可变),并且我不确定指针接收器在传递带有接口的结构时如何工作。
这是我定义二叉树的方式。
type btree interface {
display(io.Writer)
add(int) btree
replace(int, int)//A test to see if we are sharing nodes
}
二叉树节点定义如下:
type node struct {
data int
left btree
right btree
}
和空的二叉树节点
type empty struct{}
功能与方法
func createEmpty() btree {
return &empty{}
}
节点结构的方法
//replace is just a test to see if I'm sharing nodes
func (n *node) replace(value, replacement int) {
if n.data < value {
n.left.replace(value, replacement)
} else if n.data > value {
n.right.replace(value, replacement)
} else {
n.data = replacement
}
}
func (n *node) add(data int) btree {
if n.data < data {
l := &node{n.data, n.left.add(data), n.right}
return l
} else if n.data > data {
r := &node{n.data, n.left, n.right.add(data)}
return r
} else {
return n
}
}
func (n *node) display(w io.Writer) {
n.left.display(w)
fmt.Fprintln(w, n.data)
n.right.display(w)
}
空节点的方法
//replace is just a test to see if I'm sharing nodes
func (*empty) replace(_, _ int) {}
func (e *empty) add(data int) btree {
en := &node{data, e, e}
return en
}
func (*empty) display(w io.Writer) {
fmt.Fprintln(w, "Empty")
}
请注意,代码确实按预期工作,但我不确定当我将带有接口成员的结构传递给指针接收器时会发生什么。接口数据结构是否被复制,但只是一个浅拷贝,所以它指向的数据保持不变?在这种情况下,是否有关于接口会发生什么的文档?
皈依舞
相关分类