本文共 627 字,大约阅读时间需要 2 分钟。
看下面向过程的代码:
package mainimport "fmt"type Integer int func adder(x, y Integer) Integer { return x + y}func main() { var x Integer = 1 var y Integer = 2 fmt.Println(adder(x, y))}
结果:3
面向对象要怎么写?
package mainimport "fmt"type Integer int func (i Integer) adder(x Integer) { i += x}func main() { var x Integer = 1 var y Integer = 2 x.adder(y) fmt.Println(x)}
结果:1
居然不是3, 问题在哪里呢? 看代码:
package mainimport "fmt"type Integer int func (i *Integer) adder(x Integer) { *i += x}func main() { var x Integer = 1 var y Integer = 2 x.adder(y) fmt.Println(x)}
结果:3
注意,在调用x.add(y)时,实际上是把x的地址传给给adder函数的i指针。
转载地址:http://lczti.baihongyu.com/