13
|
horseyguy · 技术社区 · 14 年前 |
![]() |
1
3
以姆拉丁的名义把这个作为一个实际的答案,因为我发现它非常有用,我猜答案会被索引,无论它做了什么疯狂的事情。
|
![]() |
2
4
多重继承最常见的问题是 Diamond Problem . 如果同一级别上的多个超类定义了同一个方法,您如何知道对子类调用哪个方法? 对于模块,这个问题很容易解决-最后包含的模块总是“赢”。不能同时包含几个模块,就像C++中的类一样。所以这个问题从来没有出现过。
我完全不同意。 首先,在ruby中模块永远不会被“用作超类”;只有超类才是。 其次,使用多重继承,确切地知道构造函数(析构函数)的顺序被称为是 not a trivial matter . ruby模块不允许实例化的事实完全消除了这个问题。 |
![]() |
3
0
看看实用出版社的“元编程Ruby”一书。它包含了一个非常详细的解释,以一种非常容易阅读和理解的方式。 http://pragprog.com/titles/ppmetr/metaprogramming-ruby 我不能回答你的任何问题,因为我不懂python。但是为什么它不是多重继承的基本原理是ruby在包含模块或者类被模块扩展时将模块注入继承链。
这比这要复杂得多,而且继承注入发生的顺序也有规则。我引用的那本书解释得很好。 |
![]() |
4
0
在ruby中,最重要的是用每个包含的模块覆盖以前的数据/函数定义。 所以这是不好的,因为每个新的模块理论上都应该负责访问被覆盖的以前的代码。 所以编写新模块的示例代码是(逻辑上):
每个包含的模块将构建覆盖方法链,因此多重继承不会有问题,但包含模块的顺序变得更重要。 这种方法也被称为monkey-patching——Ruby on Rails中广泛使用的术语。 |
![]() |
cluster1 · 采取独立的新行动的好处是什么? 7 月前 |
|
Robert · 使用JSON或哈希时,将NULL替换为NIL 7 月前 |
![]() |
lucycoco · 如何解决pod安装问题并成功运行pod安装? 11 月前 |
![]() |
Vessel · Ruby-包含任意数量元素的所有排列 11 月前 |