2016-04-13 28 views
0

Git bir yapısını parçalara ayırmaya çalışıyorum. isimsiz tanımlayan Bar işlev 3 yöntem tanımları (Len, Swap ve Less) hareket ettirmek için herhangi bir şekilde varGolang'daki "sort" Arabirimini Kapsülleme

type byName []*Foo // struct Foo is defined in another package 

func (a byName) Len() int   { return len(a) } 
func (a byName) Swap(i, j int)  { a[i], a[j] = a[j], a[i] } 
func (a byName) Less(i, j int) bool { return a[i].Name < a[j].Name } 

func Bar() { 
    var foos []*Foo // Populated by a call to an outside function 

    sort.Sort(byName(foos)) 
    ... 
} 

: I paketin üst düzeyde 3 yöntem tanımlayarak sort.Interface uygulayabilir Go yöntemi?

// Something like this 
func Bar() { 
    ... 
    Len := func (a byName)() int { return len(a) } 
} 

En üst düzeyde tanımlanan 3 yönteme bu paketin dışından erişilebilir mi? Tahmin etmiyorum, çünkü byName tipi yereldir.

+3

'Len' tam adı,' packagename.byName.Len' dir. Söylediğiniz gibi, 'byName' ihraç edilemez olduğundan, 'Len' harici bir pakete de görünmez. –

cevap

2

Basit cevap, hayır, Git'te anonim yöntemler diye bir şey yoktur.

Anonim işlevler bir alıcı kullanılarak bildirilemediği için, bunlar etkili yöntem değildir, bu nedenle byName türü gerekli sort.Interface uygulanmaz.

+0

Oh iyi. Tanımları "gizlemek" umuyordum, ama sanırım sadece yerel oldukları için, bunun yeterli olması gerekecek. – Ralph

İlgili konular