Rust的多继承和mixin机制
2016-05-23 00:00
253 查看
先上一段Rust代码:
给java和php的童鞋的解释就是:两个接口A和B,一个类S,S分别针对A和B实现了say()这个方法。
因为这在java或php(抄袭java的面向对象)是不可能的,万恶的根源在于他们是将类的所有方法都写在类这个域里面,然后得出“多继承”可能会导致函数冲突(两个父类拥有相同原型的函数)的荒谬理论。
在Rust中,得益于成员函数写在了struct之外(而且可以是多个impl的域),函数冲突的问题重来就没有过。
另外Rust的trait可以有默认实现,和有函数实体的父类异曲同工。
====
2016.6.10
Rust没有继承,struct之间并不能复用代码。
trait A { fn say(self); } trait B { fn say(self); } struct S; impl A for S { fn say(self) { println!("S say: A"); } } impl B for S { fn say(self) { println!("S say: B"); } } fn say_a<T: A>(t: T) { t.say(); } fn say_b<T: B>(t: T) { t.say(); } fn main() { say_a(S); say_b(S); }
给java和php的童鞋的解释就是:两个接口A和B,一个类S,S分别针对A和B实现了say()这个方法。
因为这在java或php(抄袭java的面向对象)是不可能的,万恶的根源在于他们是将类的所有方法都写在类这个域里面,然后得出“多继承”可能会导致函数冲突(两个父类拥有相同原型的函数)的荒谬理论。
在Rust中,得益于成员函数写在了struct之外(而且可以是多个impl的域),函数冲突的问题重来就没有过。
另外Rust的trait可以有默认实现,和有函数实体的父类异曲同工。
====
2016.6.10
Rust没有继承,struct之间并不能复用代码。
相关文章推荐
- error while loading shared libraries: xxx.so.x"错误
- python 3.5以上安装 lxml 折腾一个下午 - -
- CLR存储过程
- 2016年5月,在广州来了一场“小资”的沙龙
- 由于您比红薯帅,所以无法打开门空间
- shell的要点
- shell的sed指令
- 打开系统相册,资源库,相机,选择图片
- ORACLE中date类型字段的处理
- js图片放大缩小
- java伪造http请求多文件上传
- django的admin 管理
- nginx配置多个项目(不同的tomcat)
- URL实用函数
- 复制内容到系统剪贴板(无flash)
- 发起JSONP请求
- color实用函数
- 供应链身份
- RMT导出Excel
- NSRunloop,runloop,autoReleasePool和thread的关系理解及案例解决