文档章节

Rust的多继承和mixin机制

__JM_Joy__
 __JM_Joy__
发布于 2016/05/23 22:03
字数 269
阅读 196
收藏 1

先上一段Rust代码:

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之间并不能复用代码。

© 著作权归作者所有

共有 人打赏支持
__JM_Joy__
粉丝 31
博文 26
码字总数 4751
作品 0
江门
程序员
私信 提问
PythonMaxin机制

Mixin简介 Mixin编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是有类的继承机制就可以实现,然而这与传统的类继承有所不同。通常mixin并不作为任何类...

阿帆提
2016/11/16
2
0
关于php语言

1 首先,php语言是一门动态语言,弱类型,解释执行; 2 其次,说说php的语法,他的语法跟c++的类似,与其他脚本语言ruby/python有区别,区别只不过是语法糖多或少的问题; 3 然后,说说编程思想...

shigebeyond
2014/07/05
0
0
关于Scala多重继承的菱形问题

在Scala中的trait中引入了混入的概念,即Mixin of trait。 什么是混入(mixin) 可能翻译不准确,有人也称之为混入类(mixins),混入是一种组合的抽象类,主要用于多继承上下文中为一个类添加...

Barudisshu
2015/05/25
0
1
理解Dart的Mixin继承机制

Dart语言集合了现代编程语言的众多优点,Mixin继承机制也是其一。但针对Java程序员来说,可能不是一下子能理解的,比如我第一次看到的时候,也迷迷糊糊了半天——这是啥玩意??? 要说Mixin...

街角的小丑
2018/11/28
0
0
MooTools Class 使用、继承详解(下)

继承 继承的主要好处表现在代码的重用方面,通过建立类之间的继承关系,有些方法我们只需要定义一次就可以了。同样,如果需要修改这些方法或排查其中的错误,那么由于其定义只出现在一个位置...

DerekLi
2014/05/09
0
3

没有更多内容

加载失败,请刷新页面

加载更多

Redis之父表示ARM服务器没戏!

ARM表示Neoverse N1平台和E1 CPU即将发布,Neoverse N1和E1采用7nm制程,并且为服务器和通信设备增加重要提升,拥有高可扩展性、高处理量以及高性能,将分别在2020年和2021年投入使用。 与C...

linuxCool
13分钟前
1
0
YARN 内存参数终极详解

YARN环境中应用程序JAR包冲突问题的分析及解决 Hadoop框架自身集成了很多第三方的JAR包库。Hadoop框架自身启动或者在运行用户的MapReduce等应用程序时,会优先查找Hadoop预置的JAR包。这样的...

stys35
18分钟前
0
0
Mybatis常用总结一

这一节的学习强烈建议实际操作 主键自增和自定义主键 实现描述:我们在写程序时,时常会遇到这样的问题:插入一条数据,但因有主键的存在,而有时候会报“违反唯一性约束”的错误,我们可以使...

大笨象会跳舞吧
19分钟前
0
0
计数二进制子串

leetcode:https://leetcode.com/problems/count-binary-substrings/ 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起...

woshixin
22分钟前
0
0
mysql utf8mb4字符集,存储emoji表情

字符集utf8mb4 utf8mb4兼容utf8,且比utf8能表示更多的字符。 看unicode编码区 从1 ~ 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些...

我心中有猛狗
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部