第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么不能同時為結構及其指針定義方法?

為什么不能同時為結構及其指針定義方法?

Go
慕森王 2021-05-14 18:27:48
給定golang巡回演出的第54張幻燈片中的設置:type Abser interface {    Abs() float64}type Vertex struct {    X, Y float64}func (v *Vertex) Abs() float64 {    return math.Sqrt(v.X*v.X + v.Y*v.Y)}為什么不能同時為結構體和指向結構體的指針定義方法?那是:func (v Vertex) Abs() float64 {    return math.Sqrt(v.X*v.X + v.Y*v.Y)}定義此錯誤將導致以下錯誤:prog.go:41: method redeclared: Vertex.Abs    method(*Vertex) func() float64    method(Vertex) func() float64
查看完整描述

2 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

它可以。只需在結構而不是指針上定義它即可。它將解決兩種方式


方法集


指針類型* T的方法集是接收者* T或T的所有方法的集(也就是說,它也包含T的方法集)


嘗試直播:http://play.golang.org/p/PsNUerVyqp


package main


import (

    "fmt"

    "math"

    )


type Abser interface {

    Abs() float64

}


type Vertex struct {

    X, Y float64

}


func (v Vertex) Abs() float64 {

    return math.Sqrt(v.X*v.X + v.Y*v.Y)

}


func main() {

    v := Vertex{5, 10}

    v_ptr := &v

    fmt.Println(v.Abs())

    fmt.Println(v_ptr.Abs())

}

更新:根據評論,我創(chuàng)建了一個額外的示例,該示例實際上利用Abser接口來說明值和指針都滿足該接口。


https://play.golang.org/p/Mls0d7_l4_t


查看完整回答
反對 回復 2021-05-24
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

例如,在考慮時:


type T U


func (t *T) M() int { return 1 }


var t T

...我們現在可以通過編寫來調用M(),t只要t.M()語言允許,即使在其基礎(非指針)類型的實例上,也可以使用指針接收器調用方法,即,它等效于(&t).M()。


如果現在允許它另外定義:


func (t T) M() int { return 2 }

...然后無法告訴現在t.M()應該返回什么。


查看完整回答
反對 回復 2021-05-24
  • 2 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號