2016-09-01 13 views
1

インターフェースのスライスを作成し、その具体的な種類にそれを開始するいくつかの問題を持つことへのキャストは、任意のヘルプは大幅にコンクリートタイプのスライスを作成し、そのそれぞれのインタフェース

インタフェース

type MatrixElement interface { 
    GetValue() Element 
    GetCoordinate() Coordinate 
} 

コンクリートをappretiatedされるだろう実装

type LocatableElement struct { 
    value datastructures.Element 
    coordinate datastructures.Coordinate 
} 

func (ele LocatableElement)GetValue() datastructures.Element { 
    return ele.value 
} 

func (ele LocatableElement)GetCoordinate() datastructures.Coordinate { 
    return ele.coordinate 
} 

func CreateLocatableElement(value datastructures.Element, coordinate datastructures.Coordinate) LocatableElement { 
    return LocatableElement{ 
     value: value, 
     coordinate: coordinate, 
    } 
} 

スライスとしてタイプを定義

type HorizontalMatrix [][]datastructures.MatrixElement 

あなたはどちらのキャスト[]ConcreteTypes([]Interfaces)することはできません新しいHorizo​​natlMatrix

func CreateHorizontalMatrix(rows int, columns int) HorizontalMatrix { 
    horzMatrix := make([][]matrix.LocatableElement, rows) 
    for i := 0; i < rows; i++ { 
     horzMatrix[i] = make([]matrix.LocatableElement, columns) 
    } 
    return horzMatrix; 
} 

cannot use horzMatrix (type [][]matrix.LocatableElement) as type HorizontalMatrix in return argument

答えて

1

のインスタンスを作成したりConcreteTypesInterfacesを実装し、それにもかかわらず[]Interfaces.([]ConcreteTypes)を主張。あなたは、コンテナ

type Matrix interface{ 
    GetElem(abs, ord int) MatrixElement 
} 

を定義し、HorizontalMatrixのためにそれを満たすか、[]インターフェース

horzMatrix := make([][]matrix.MatrixElement, rows) 
horzMatrix[i] = make([]matrix.MatrixElement, columns) 

と私が正しく理解してるのであれば、技術的に具体的なタイプでLocatableElement

+0

それを埋めるよりとして行列を作る必要があるのいずれか'horzMatrix'はインタフェースへの参照を割り当てるだけです(ポインタの割り当てのみ)実際に物理ペイロードを保持する物理データ構造への実際の割り当ては行われません 割り当て 'horzMatrix [row] [column]'が実際の 'LocatableElement'への割り当てである場合にのみ、doneが実行されます。 (LocatableElement構造体が割り当てられ、作成され、以前に作成されたポインタが新しく割り当てられた構造体を指すようにされている) – MrX

+0

はいそうだと思います。 – Uvelichitel

+0

@MrX、[more background](https://golang.org/doc/faq#convert_slice_of_interface)を参照してください。 – kostix

関連する問題