我刚开始使用go
语言,一切看起来都很酷,我编写了我需要的所有内容,但我有两个问题,实际上是将一个切片传递给Struct
或者所谓的object
,以及如何创建一个我可以添加的方法,例如另一个矩阵,但这是我认为的小问题。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
a := Matrix(nonsingularRandomMatrix())
fmt.Println(a)
}
type Matrix struct {
inputMatrix [][]int
}
func NewThing(inMatrix [][]int) *Matrix {
p := new(Matrix)
p.inputMatrix = inMatrix
return p
}
func nonsingularRandomMatrix() [][]int {
rand.Seed(time.Now().UTC().UnixNano())
var matrixDeterminant int = 0
nm := make([][]int, 4)
for i := 0; i < 4; i++ {
nm[i] = make([]int, 4)
for j := 0; j < 4; j++ {
nm[i][j] = rand.Intn(100)
}
}
matrixDeterminant =
nm[0][0]*nm[1][1]*nm[2][2]*nm[3][3] - nm[0][0]*nm[1][1]*nm[2][3]*nm[3][2] -
nm[0][0]*nm[1][2]*nm[2][1]*nm[3][3] + nm[0][0]*nm[1][2]*nm[2][3]*nm[3][1] +
nm[0][0]*nm[1][3]*nm[2][1]*nm[3][2] - nm[0][0]*nm[1][3]*nm[2][2]*nm[3][1] -
nm[0][1]*nm[1][0]*nm[2][2]*nm[3][3] + nm[0][1]*nm[1][0]*nm[2][3]*nm[3][2] +
nm[0][1]*nm[1][2]*nm[2][0]*nm[3][3] - nm[0][1]*nm[1][2]*nm[2][3]*nm[3][0] -
nm[0][1]*nm[1][3]*nm[2][0]*nm[3][2] + nm[0][1]*nm[1][3]*nm[2][2]*nm[3][0] +
nm[0][2]*nm[1][0]*nm[2][1]*nm[3][3] - nm[0][2]*nm[1][0]*nm[2][3]*nm[3][1] -
nm[0][2]*nm[1][1]*nm[2][0]*nm[3][3] + nm[0][2]*nm[1][1]*nm[2][3]*nm[3][0] +
nm[0][2]*nm[1][3]*nm[2][0]*nm[3][1] - nm[0][2]*nm[1][3]*nm[2][1]*nm[3][0] -
nm[0][3]*nm[1][0]*nm[2][1]*nm[3][2] + nm[0][3]*nm[1][0]*nm[2][2]*nm[3][1] +
nm[0][3]*nm[1][1]*nm[2][0]*nm[3][2] - nm[0][3]*nm[1][1]*nm[2][2]*nm[3][0] -
nm[0][3]*nm[1][2]*nm[2][0]*nm[3][1] + nm[0][3]*nm[1][2]*nm[2][1]*nm[3][0]
if matrixDeterminant == 0 {
nonsingularRandomMatrix()
}
return nm
}
go run oop.go
命令行-参数
。\ oop.go:10:无法将nonsingularRandomMatrix()(类型[] [] int)转换为Matrix
有任何线索吗?
电贺!
答案 0 :(得分:3)
您的编译器所说的是[][]int
和Matrix
是两种完全不相关的类型。您无法从一个转换为另一个。那是因为Matrix
是struct
,包含 [][]int
,但Matrix
不是 {{1} }。要创建[][]int
,您需要创建新的Matrix
并将Matrix
设置为唯一的成员:
[][]int
如果a := Matrix{nonsingularRandomMatrix()}
<{1}},则更简单的方法。
Matrix
这只会为[][]int
创建一个新名称(type Matrix [][]int
),在这种情况下,简单(显式)转换可以正常工作
Matrix