2012-04-21 10 views
1

匿名メソッドの埋め込みを使用する場合、 "親"構造体のメソッドから "子"構造体の名前にアクセスする方法はありますか?例について埋め込みによるリフレクション

type Animal struct{} 

func (a Animal) SayName() string { 
    v := reflect.TypeOf(a) 
    return v.Name() 
} 

type Zebra struct { 
    Animal 
} 

var zebra Zebra 
zebraName := zebra.SayName() // "Animal" want "Zebra" 

SayName()メソッドは、 "親" のtype.Name()を返します。

私はこのようなことをすることができることを認識していますが、これはAPIのために頻繁に再利用されます。私は反復性の低いソリューションを持つことを好むだろう。

type Animal struct{ 
    Name string 
} 

func (a Animal) SayName() string { 
    return a.Name 
} 

type Zebra struct { 
    Animal 
} 

zebra := &Zebra{Name:"Zebra"} 
zebraName := zebra.SayName() // "Zebra" 

どのようにこれを達成できますか?これはGoで可能ですか?

ありがとうございます。

答えて

2

Animalタイプは、メンバーとしてメンバーを含めることができるタイプについては何も知らないため、Animalメソッドは受信者だけに基づいてこの回答を与えることはできません。しかし、この情報はゼブラ法から得なければなりませんか?

func SayName(a interface{}) string { 
    return reflect.TypeOf(a).Name() 
} 

は、シマウマが含まれています。

+0

ありがとうございました。実際のユースケースでは、「インスタンス」に対していくつかの動作を行い、「クラス」には複数のメソッドを使用します。一貫性のために、私はドット表記法を使用してメソッドを呼び出せるようにしたいと思います。問題は、これらのメソッドのそれぞれが構造体の名前を知る必要があることです。 –

1

私は遅延バインディングを達成するためにこの方法を使用します。

http://play.golang.org/p/03-rs4bLaV

それほど完璧ではない

が、方法はこれを達成するために。

+0

サンプルコードありがとうございます。 –

関連する問題