インターフェイスのタイプに基づいて関数が選択されるこのイディオムの名前はありますか?このイディオムの名前はありますか?
type encoderFunc func(e *encodeState, v reflect.Value, opts encOpts)
var encoderCache struct {
m map[reflect.Type]encoderFunc
}
func (e *encodeState) marshal(v interface{}, opts encOpts) (err error) {
v := refect.ValueOf(v)
valueEncoder(v)(e, v, opts)
return nil
}
func valueEncoder(v reflect.Value) encoderFunc {
return encoderCache.m[v.Type()]
}
encoding/jsonからコピーされ、デモ用に少し変更されています。
私には分かりませんが、これは私を一種の相続財産と呼びます。関数がインタフェースではなくABCの一部であった場合、言語はその型に基づいて正しいメソッドを自動的に選択します。 – Carcigenicate
@Carcigenicate、あなたはどういう意味ですか?私はこれがいかなる方法でも継承に関係しているとは思わない。関係するタイプは完全に無関係です。 – Sridhar
Nvm、私はコードを誤解したと思う。一番上の記述とコードから、オブジェクトの型に基づいて関数をディスパッチしているように思えました。 – Carcigenicate