【发布时间】:2014-08-16 20:49:34
【问题描述】:
Go 方法接收器接受一个类型以及该类型的变量名,例如:
type MyFloat float64
func (x MyFloat) Abs() float64 {
if x < 0 {
return float64(-x)
}
return float64(x)
}
func main() {
f := MyFloat(-math.Sqrt2)
fmt.Println(f.Abs())
}
接收者接受"x" 以及接收方法的类型。 “x”这个名字有什么意义。由于我能够在 MyFloat 的任何实例上调用该方法(不仅仅是在名为 x 的实例上),为什么我必须指定 x ?既然接收者是一个类型或一个类型的引用,为什么不简单地像这样单独获取类型或指针
func (MyFloat) Abs() float64 {
if this < 0 {
return float64(-this)
}
return float64(this)
}
我的假设是Java golang 中的this 允许任何名称?是这样吗?
【问题讨论】:
-
好问题。这超出了我的理解,为什么“约定优于配置”警察又名 go 语言创建者(参见例如变量的大写等确定可见性)将使
this的名称可配置。一个方法中是否可以有两个接收器,或者为什么有人需要它?this是任何人都可以立即习惯的约定。