为了账号安全,请及时绑定邮箱和手机立即绑定

接口作为参数。这怎么可能?

接口作为参数。这怎么可能?

Go
烙印99 2021-07-04 12:09:04
接口作为参数。这怎么可能?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里面没有任何数据,如何操作plus?该函数还接收  func String(A MatrixRO) string {MatrixRO 作为参数。怎么可能?是因为线路DenseMatrix() *DenseMatrixSparseMatrix() *SparseMatrix? 如果它需要嵌入一些东西,不应该像下面这样吗?DenseMatrixSparseMatrixps DenseMatrix 和 SparseMatrix 结构定义如下:type DenseMatrix struct {  matrix  elements []float64  step int}
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

一个接口只包含一组方法,所以如果你得到一个接口值,你有两个选择:

  1. 仅使用接口公开的方法。

  2. 使用类型断言将其转换为具体类型。

我对所讨论的代码并不熟悉,但我怀疑这种MatrixRO类型的实现者可能会将两者结合起来。

如果一个特定的MatrixRO实现知道Plus当另一个操作数是相同类型时的快速实现方式,它可以使用类型断言来决定是否调用快速路径。

如果它不能识别其他操作数的类型,则DenseMatrixorSparseMatrix方法提供了一种访问执行操作所需数据的方法。


查看完整回答
反对 回复 2021-07-05
  • 1 回答
  • 0 关注
  • 300 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信