From b31c99b0442ff396b64acf22531f91193ffac526 Mon Sep 17 00:00:00 2001 From: Wenlei Date: Tue, 16 Oct 2012 14:16:58 +0800 Subject: [PATCH] smoothen some sentences --- 2.5.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/2.5.md b/2.5.md index e42d0046..d4b4dcce 100644 --- a/2.5.md +++ b/2.5.md @@ -32,7 +32,11 @@ 很显然,这样的实现并不优雅,而且从概念上来说一个"形状"的面积应该是"形状"的一个特性,应该是属于这个形状的,就像他的字段一样。 -基于上面的原因所以就有了`method`的概念,`method`是附属在一个给定的类型上的,他的语法和函数的声明语法几乎一样,只是在`func`后面增加了一个receiver(也就是method所依从的主体),用上面提到的形状的例子来说,method `area()` 是依赖于某个形状(比如说Rectangle)来发生作用的。Rectangle.area()的发出者应该是Rectangle, area()是属于Rectangle而非一个外围函数。更具体地说,Rectangle存在字段length 和 width,同时存在方法area(), 这些字段和方法都属于Rectangle。 +基于上面的原因所以就有了`method`的概念,`method`是附属在一个给定的类型上的,他的语法和函数的声明语法几乎一样,只是在`func`后面增加了一个receiver(也就是method所依从的主体)。 + +用上面提到的形状的例子来说,method `area()` 是依赖于某个形状(比如说Rectangle)来发生作用的。Rectangle.area()的发出者是Rectangle, area()是属于Rectangle的方法,而非一个外围函数。 + +更具体地说,Rectangle存在字段length 和 width, 同时存在方法area(), 这些字段和方法都属于Rectangle。 用Rob Pike的话来说就是: @@ -91,7 +95,7 @@ method的语法如下: ![](images/2.5.shapes_func_with_receiver_cp.png?raw=true) -在上例,method area() 分别属于Rectangle和Circle, 于是他们的 Receiver 就变成了Rectangle 和 Circle, 意思是,这个area()方法 是由 Rectangle/Circle 发出的。 +在上例,method area() 分别属于Rectangle和Circle, 于是他们的 Receiver 就变成了Rectangle 和 Circle, 或者说,这个area()方法 是由 Rectangle/Circle 发出的。 >值得说明的一点是,图示中method用虚线标出,意思是此处方法的Receiver是以值传递,而非引用传递,是的,Receiver还可以是指针, 两者的差别在于, 指针作为Receiver会对实例对象的内容发生操作,而普通类型作为Receiver仅仅是以副本作为操作对象,并不对实例对象发生操作。后文对此会有详细论述。