From ded6111b0a56ab07ff8ffd9fbb6a75ab219b42cc Mon Sep 17 00:00:00 2001 From: xiemengjun Date: Fri, 31 Aug 2012 23:43:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=8A=E5=A4=A9=E5=8F=AA=E6=98=AF=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BA=86=E4=B8=80=E4=BA=9B=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2.5.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/2.5.md b/2.5.md index bf47b71a..d1046f9f 100644 --- a/2.5.md +++ b/2.5.md @@ -22,13 +22,13 @@ fmt.Println("Area of r2 is: ", area(r2)) } -我们这个代码是可以计算出来长方形的面积,但是他不是作为长方形的一个方法(类似面向对象里面的方法)实现的,而是长方形作为函数的一个参数传入,然后计算获取的。 +这个代码是可以计算出来长方形的面积,但是area不是作为Rectangle的一个方法(类似面向对象里面的方法)实现的, 而是Rectangle的对象(r1,r2)作为函数的一个参数传入,然后计算获取的。 这样实现有什么问题,当然没有问题咯,但是当你代码里面增加一个圆形、正方形、多边形等的时候,然后你又想计算他们的面积的时候怎么办啊?那就增加新的函数咯,但是函数名你就必须要跟着换了,你就要把函数名变成`area_rectangle, area_circle, area_triangle...` -这样的实现不是最优雅的,而且从概念上来说一个形状的面积应该是属于的一个特性,应该是属于这个形状的,就像他的字段一样。 +这样的实现不是最优雅的,而且从概念上来说一个形状的面积应该是属于它的一个特性,应该是属于这个形状的,就像他的字段一样。 -基于上面的原有所以才有了`method`的概念,`method`是附属在一个给定的类型上的,他的语法和函数的申明语法一模一样除了在`func`后面跟一个接收者(也就是给定的类型) +基于上面的原因所以就有了`method`的概念,`method`是附属在一个给定的类型上的,他的语法和函数的申明语法几乎一样,除了在`func`后面跟一个receiver(也就是给定的类型) 用Rob Pike的话来说就是: @@ -75,13 +75,13 @@ method的语法如下: fmt.Println("Area of c2 is: ", c2.area()) } -在使用method的过程重要注意几点 +在使用method的时候重要注意几点 - 虽然method的名字一模一样,但是如果接收者不一样,那么method就不一样 - method里面可以访问接收者的字段 - 调用method通过`.`访问,就像struct里面访问字段一样 -那是不是method只能作用在struct上面呢?当然不是咯,他可以定义在任何你自定义的类型、内置类型、struct等各种类型上面。这里你是不是有点迷糊了,什么自定义类型,自定义类型不就是struct嘛,不是这样的哦,struct只是自定义类型里面一种比较特殊的类型而已,还有其他自定义类型申明,可以通过如下这样的申明来实现。 +那是不是method只能作用在struct上面呢?当然不是咯,他可以定义在任何你自定义的类型、内置类型、struct等各种类型上面。这里你是不是有点迷糊了,什么叫自定义类型,自定义类型不就是struct嘛,不是这样的哦,struct只是自定义类型里面一种比较特殊的类型而已,还有其他自定义类型申明,可以通过如下这样的申明来实现。 type type_name type_literal @@ -100,7 +100,7 @@ method的语法如下: "December":31, } -看到了吗?简单的很吧,这样你就可以在你自己的代码里面定义有意义的类型了,设置只是一个简单的别名,例如上面ages替代了int +看到了吗?简单的很吧,这样你就可以在自己的代码里面定义有意义的类型了,实际上只是一个定义了一个别名,有点类似于c中的typedef,例如上面ages替代了int 好了,让我们回到`method`