Interface 接口作为参数。怎么可能呢?
接口作为参数。怎么可能呢 这个包有这个接口Interface 接口作为参数。怎么可能呢?,interface,go,Interface,Go,接口作为参数。怎么可能呢 这个包有这个接口 type MatrixRO interface { Nil() bool Rows() int Cols() int NumElements() int GetSize() (int, int) Get(i, j int) float64 Plus(MatrixRO) (Matrix, error) Minus(MatrixRO) (Matrix, error) Times(MatrixRO) (Matrix,
type MatrixRO interface {
Nil() bool
Rows() int
Cols() int
NumElements() int
GetSize() (int, int)
Get(i, j int) float64
Plus(MatrixRO) (Matrix, error)
Minus(MatrixRO) (Matrix, error)
Times(MatrixRO) (Matrix, error)
Det() float64
Trace() float64
String() string
DenseMatrix() *DenseMatrix
SparseMatrix() *SparseMatrix
}
接口只有方法。不是数据结构。
那么,Plus(MatrixRO)如何接收作为参数的接口呢?
即使MatrixRO没有任何数据,如何操作plus
此函数还接收
func String(A MatrixRO) string {
MatrixRO作为一个参数
这怎么可能?是因为排队吗
DenseMatrix() *DenseMatrix
SparseMatrix() *SparseMatrix
??如果它需要嵌入一些东西,它不应该像下面这样吗
DenseMatrix
SparseMatrix
p、 s.DenseMatrix和SparseMatrix结构的定义如下:
type DenseMatrix struct {
matrix
elements []float64
step int
}
一个接口仅由一组方法组成,因此,如果您收到一个接口值,则有两个选项:
MatrixRO
类型的实现者可能会将两者结合起来
如果一个特定的MatrixRO
实现知道在另一个操作数的类型相同时实现Plus
的快速方法,它可以使用类型断言来决定是否调用快速路径
如果它不能识别其他操作数的类型,则
DenseMatrix
或SparseMatrix
方法提供了一种访问执行该操作所需数据的方法。如果您还没有完成,我建议您使用它。Go中的类型和方法的工作方式与您可能习惯的有点不同。从本教程的第二部分开始,它介绍了Go中结构和接口的工作方式