Update src/basic/trait/trait-object.md

pull/552/head
Sunface 3 years ago committed by GitHub
parent 3b0de0f9db
commit 1dd0ad82bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -297,7 +297,7 @@ help: function arguments must have a statically known size, borrowed types alway
简而言之,当类型 `Button` 实现了特征 `Draw` 时,类型 `Button` 的实例对象 `btn` 可以当作特征 `Draw` 的特征对象类型来使用,`btn` 中保存了作为特征对象的数据指针(指向类型 `Button` 的实例数据)和行为指针(指向 `vtable`)。
一定要注意,此时的 `btn` 被当作特征 `Draw` 的特征对象的实例数据,而不再是类型 `Button` 的实例对象,而且 `btn``vtable` 只包含了实现自特征 `Draw` 的那些方法(比如 `draw`),因此 `btn` 只能调用实现于特征 `Draw``draw` 方法,而不能调用类型 `Button` 本身实现的方法和类型 `Button` 实现于其他特征的方法。**也就是说,`btn` 当作哪个特征对象来用,它的 `vtable` 中就包含哪个特征的方法。**
一定要注意,此时的 `btn` `Draw` 的特征对象的实例,而不再是具体类型 `Button` 的实例,而且 `btn``vtable` 只包含了实现自特征 `Draw` 的那些方法(比如 `draw`),因此 `btn` 只能调用实现于特征 `Draw``draw` 方法,而不能调用类型 `Button` 本身实现的方法和类型 `Button` 实现于其他特征的方法。**也就是说,`btn` 是哪个特征对象的实例,它的 `vtable` 中就包含了该特征的方法。**
## Self 与 self

Loading…
Cancel
Save