作为参数的接口。怎么可能?
https://github.com/skelterjohn/go.matrix/blob/go1/matrix.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, error)
Det() float64
Trace() float64
String() string
DenseMatrix() *DenseMatrix
SparseMatrix() *SparseMatrix
}
接口只有方法。不是数据结构。 那么Plus(MatrixRO)如何接收接口作为参数? 即使MatrixRO中没有任何数据,如何才能运行?
此功能也接收
func String(A MatrixRO) string {
MatrixRO作为参数。
怎么可能?是因为行
DenseMatrix() *DenseMatrix
SparseMatrix() *SparseMatrix
?如果它需要嵌入某些东西,那么它不应该像下面那样吗?
DenseMatrix
SparseMatrix
P.S。 DenseMatrix和SparseMatrix结构定义如下:
type DenseMatrix struct {
matrix
elements []float64
step int
}
答案 0 :(得分:3)
接口只包含一组方法,所以如果你有一个接口值,你有两个选择:
我对相关代码并不熟悉,但我怀疑这种MatrixRO
类型的实施者可能会将两者结合起来。
如果特定MatrixRO
实现在另一个操作数属于同一类型时知道实现Plus
的快速方法,则可以使用类型断言来决定是否调用快速路径。
如果它无法识别其他操作数的类型,DenseMatrix
或SparseMatrix
方法提供了访问执行操作所需数据的方法。