该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-18
我没有看过 Ruby 的源代码,不过可以猜想 模块和 类的主要差别:
类可以生成实例对象,实例对象有单独的对象 id,实例对象有单独的存储区。 我进一步想象,呵呵:把类退化成模块,就需要去除对象 id 。允许原来单独存储的实例对象数据被合并到其他类的实例对象中。 |
|
返回顶楼 | |
发表时间:2006-09-18
mixin不一定代表多重继承啊。一个类可以什么都不继承而被另一个模块mixin从而简单复用,当然你可以说任何类都继承自Object。。。
module只代表namespace罢了,相当于package,为什么要把class退化过去? |
|
返回顶楼 | |
发表时间:2006-09-18
类无法被 mixin, 把类退化为模块,是为了能够被 mixin.
你没有明白我的意思。 |
|
返回顶楼 | |
发表时间:2006-09-18
一个关于rails的初级问题:
rails的魔板和jsp很像。不知道能否做到freemarker的macro功能?觉得不能重用显示逻辑还是不太爽的。 |
|
返回顶楼 | |
发表时间:2006-09-18
potian 写道 在Ruby中,Object、Class和Module是三个特殊的类。它们的创建过程被分为两个步骤,而不是象其它类一样一步到位。首先,Ruby建立这3个类的继承关系,但是并没有创建它们的metaclass,形成下图的情形,这个时候还没有符合类的关系,以及它们的metaclass必须符合的规则: 这首先解决了一个问题,就是说Class是一个Module,而Module是一个Object,所以说Class是一个Object,因此,所有的数据都是Object。 ------------------ rails template 应该可以用 helper 类达到taglib这样的重用的效果。 helper类的写法,可能不如freemarker macro简单。也许可以自己创造个Ruby DSL as Macro. |
|
返回顶楼 | |
发表时间:2006-09-18
ajoo 写道 一个关于rails的初级问题:
rails的魔板和jsp很像。不知道能否做到freemarker的macro功能?觉得不能重用显示逻辑还是不太爽的。 partial template? |
|
返回顶楼 | |
发表时间:2006-09-18
uncutstone 写道 类无法被 mixin, 把类退化为模块,是为了能够被 mixin.
你没有明白我的意思。 你说的是Ruby么? |
|
返回顶楼 | |
发表时间:2006-09-18
gigix 写道 uncutstone 写道 类无法被 mixin, 把类退化为模块,是为了能够被 mixin.
你没有明白我的意思。 你说的是Ruby么? 对啊。 是我对 Ruby 发展的一种猜想。mixin 一个退化的类意思是: 在一个类已经从另一个类继承的情况下,需要引入又一个类的功能。 举例来说, 男人从人继承,同时又想扮演 manager 的角色, 这里涉及到三个类。 按照传统的做法,manager 通常作为一个实例变量放到 man 类中。 man 类成为manager 的delegator.但是这样需要很多的 delegate 方法,很不方便。 我的想法是让manager 类可以通过某种语言机制退化为模块,从而可以 class Person end class Manager end module_degrade Manager # imaginary class Man < Person include Manager end |
|
返回顶楼 | |
发表时间:2006-09-18
uncutstone 写道 我没有看过 Ruby 的源代码,不过可以猜想 模块和 类的主要差别:
类可以生成实例对象,实例对象有单独的对象 id,实例对象有单独的存储区。 我进一步想象,呵呵:把类退化成模块,就需要去除对象 id 。允许原来单独存储的实例对象数据被合并到其他类的实例对象中。 你说的这个我没有看明白。在我看来没有那么些复杂的事,所谓的对象,无非就是一组函数加上一个暗含的self;所谓的模块,无非就是假设了一个self但自己没有提供;所谓的mixin,无非就是把一个函数塞进另一个self的环境里面。 你要是习惯了JavaScript,就不会有那么多条条框框的想法了。什么“正统面向对象”,面向对象还有一支叫prototype-based oo呢。 |
|
返回顶楼 | |
发表时间:2006-09-18
请看我对前贴的改动。
|
|
返回顶楼 | |