1 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果一個(gè)函數(shù)確實(shí)就地修改了切片的底層數(shù)組,并且承諾它總是就地修改底層數(shù)組,那么該函數(shù)通常應(yīng)該按值獲取切片參數(shù)并且不返回更新的切片:1
// Mutate() modifies (the backing array of) s in place to achieve $result.
// See below for why it returns an int.
func Mutate(s []T) int {
// code
}
如果函數(shù)可以就地修改底層數(shù)組,但可能返回使用新數(shù)組的切片,則該函數(shù)應(yīng)返回新的切片值,或采用指向切片的指針:
// Replace() operates on a slice of T, but may return a totally new
// slice of T.
func Replace(s []T) []T {
// code
}
當(dāng)此函數(shù)返回時(shí),您應(yīng)該假設(shè)底層數(shù)組(如果您擁有它)可能正在使用,也可能沒有使用:
func callsReplace() {
var arr [10]T
s := Replace(arr[:])
// From here on, do not use variable arr directly as
// we don't know if it is s's backing array, or not.
// more code
}
但Mutate()承諾會(huì)就地修改數(shù)組。請(qǐng)注意,Mutate通常需要返回實(shí)際更新的數(shù)組元素的數(shù)量:
func callsMutate() {
var arr [10]T
n := Mutate(arr[:])
// now work with arr[0] through arr[n]
// more code
}
1當(dāng)然,它可以采用指向數(shù)組對(duì)象的指針,并就地修改數(shù)組,但這不太靈活,因?yàn)閿?shù)組大小隨后會(huì)被烘焙到類型中。
- 1 回答
- 0 關(guān)注
- 179 瀏覽
添加回答
舉報(bào)