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 关注
- 193 浏览
添加回答
举报