1 回答
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
鑒于這種結(jié)構(gòu):
type node struct {
data int
left btree
right btree
}
以及f帶有 q 指針接收器的函數(shù):
func (n *node) f() {}
f獲得指向 a 的指針node。f對(duì)節(jié)點(diǎn)所做的任何更改n都將反映在用于調(diào)用的副本上f。
更準(zhǔn)確地說(shuō),當(dāng)您調(diào)用n.f()并且 ifn是 a*node時(shí),該指針的副本被發(fā)送到f,它仍然指向與 相同的對(duì)象n。如果n不是指針,&n則將發(fā)送到f.
為了使您的代碼正常工作,左右btree接口還應(yīng)該包含*nodes,而不是nodes(您已經(jīng)正確地這樣做了)。這是因?yàn)椋?,如果您調(diào)用 ,node.left.replace您希望node.left替換 中的值。如果您有一個(gè)replace函數(shù)的值接收器,那么當(dāng)您調(diào)用node.left.replace該左側(cè)節(jié)點(diǎn)的副本時(shí),將作為接收器將其發(fā)送到函數(shù),并且修改在節(jié)點(diǎn)replace上不可見(jiàn)。node.left
希望這可以幫助。
- 1 回答
- 0 關(guān)注
- 121 瀏覽
添加回答
舉報(bào)
