2012-04-21 5 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 메소드는 수신자만으로이 답변을 제공 할 수 없습니다. 그러나이 정보는 Zebra 방법에서 가져와야합니까?

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

은 얼룩말이 포함됩니다.

+0

고마워요, 그게 내가 끝내는 길일지도 몰라. 실제 사용 사례에는 "인스턴스"에 대해 작동하는 여러 메서드와 "클래스"에 대한 일부 메서드가 포함됩니다. 일관성을 위해서 점 표기법을 사용하여 메서드를 호출하고 싶습니다. 문제는 각각의 메소드가 구조체의 이름을 알아야한다는 것입니다. –

1

나는 후반 바인딩을 달성하기 위해이 방법을 사용

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

그렇게 완벽하지

하지만, 방법이를 달성하기 위해.

+0

예제 코드를 제공해 주셔서 감사합니다. –

관련 문제