1 回答

TA貢獻1779條經驗 獲得超6個贊
泛型是編譯器為不同類型創建同一函數的多個實例的快捷方式。
讓我們嘗試手動完成編譯器的工作。您將獲得這兩個函數 - 一個用于 int:
func createGridInt(size int, forFlooded bool) [][]int {
var tempGrid [][]int
for i := 0; i <= size+1; i++ {
for j := 0; j <= size+1; j++ {
if forFlooded {
tempGrid[i][j] = false
} else {
tempGrid[i][j] = -1
}
}
}
return tempGrid
}
一個用于布爾:
func createGridBool(size int, forFlooded bool) [][]bool {
var tempGrid [][]bool
for i := 0; i <= size+1; i++ {
for j := 0; j <= size+1; j++ {
if forFlooded {
tempGrid[i][j] = false
} else {
tempGrid[i][j] = -1
}
}
}
return tempGrid
}
突然間,這不再有意義了,因為您不能在第一個函數中分配false給intas,而在第二個函數中則相反。
要解決這個問題,您需要使用Tas 您正在處理的類型。這也解決了將布爾標志傳遞給函數的代碼味道:
func createGrid[T int | bool](size int, fillWith T) [][]T {
var tempGrid [][]T
for i := 0; i <= size+1; i++ {
for j := 0; j <= size+1; j++ {
tempGrid[i][j] = fillWith
}
}
return tempGrid
}
你可以這樣稱呼它:
createGrid(n, false)
createGrid(n, -1)
- 1 回答
- 0 關注
- 309 瀏覽
添加回答
舉報