锁定老帖子 主题:Ruby类型转换
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-06
end class B < A end a = B.new 如何让a.class = A? 而不是 B 类似JAVA的强制类型转换()操作符 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-06
只有对于强类型的语言,才有必要作类型转换。
对于动态语言,没必要作类型转换的动作。 |
|
返回顶楼 | |
发表时间:2007-01-06
a.superclass
|
|
返回顶楼 | |
发表时间:2007-01-06
superclass是Class类的方法,这样编不过吧!
class A def foo puts "A" end end class B < A def foo puts "B" end end obj = B.new #obj.superclass #编译不过,因为superclass是Class类的法,obj不是Class类的实例 obj2 = B.superclass #OK, A是Class类的实例返回一个class类的实例对象 #obj2.foo #编译不过 强类型的语言多数情况下有两种转型动作,一种是int->double这样的转型, 这种情况Ruby自动处理,例如从Fixnum->Bignum. 另一种是为了支持多态才有类型转化的动作,例如A类型的指针实际指向一个B类型的对象。对于动态语言,根本没必要作类型转换的动作,因为类型不是强制的,随便指向的是什么都无所谓,只要接口一致就可以一起工作,从这点来说,动态语言天生支持范型。 对于从double->int可以自己定义方法去实现,而对于或者对象切割这种情况,个人觉得这属于语言的缺陷,没有必要支持吧?Ruby没有办法强制返回一个类的父类部分吧?有那位高人进来说说? |
|
返回顶楼 | |
发表时间:2007-01-06
grantren 写道 只有对于强类型的语言,才有必要作类型转换。
对于动态语言,没必要作类型转换的动作。 这句话有问题 强类型相对于弱类型, 动态语言相对于静态语言, ruby是动态语言但是同时也是强类型语言。 不过,答案应该没错,是由于动态语言。 我理解 子类要转换成父类通常是为了实现延迟绑定,但是在动态语言中根本不需要用这种方法来实现。 特别是在ruby中, 只要都实现了相关方法,不需要继承自同一父类,也可以实现延迟绑定。 至于楼主说的情况,不太清楚需求是什么,为什么要这么做? |
|
返回顶楼 | |
发表时间:2007-01-16
ruby是动态类型语言,这是指变量无须声明类型;
ruby是弱类型语言,不是强类型语言。这是指变量赋值后,还可以赋成另外类型的值; ruby是动态语言,这是指对象的属性,方法,可以在运行中改变。 |
|
返回顶楼 | |
发表时间:2007-01-16
凌川__ 写道 ruby是动态类型语言,这是指变量无须声明类型;
ruby是弱类型语言,不是强类型语言。这是指变量赋值后,还可以赋成另外类型的值; ruby是动态语言,这是指对象的属性,方法,可以在运行中改变。 弱类型不是这个意思吧,下面是搜到的: 引用 静态类型定义语言 一种在编译时,数据类型是固定的语言。大多数静态类型定义语言强制这一点,它要求你在使用所有变量之前要声明它们的数据类型。Java和C是静态类型定义语言。 动态类型定义语言 一种在执行期间才去发现数据类型的语言,与静态类型定义相反。VBScript和Python是动态类型定义的,因为它们是在第一次给一个变量赋值的时候找出它的类型的。 强类型定义语言 一种总是强制类型定义的语言。Java和Python是强制类型定义的。如果你有一个整数,如果不显示地进行转换,你不能将其视为一个字符串(在本章后面会有更多如何去做的内容)。 弱类型定义语言 一种类型可以被忽略的语言,与强类型定义相反。VBScript是弱类型定义的。在VBScript中,可以将字符串 '12' 和整数 3 进行连接得到字符串 '123',然后可以把它看成整数 123,而不需要显示转换。 |
|
返回顶楼 | |
发表时间:2007-01-18
Ruby的类型转换和Java的类型转换是大大不同的。 关于Ruby的类型转换,可以参见《Programming Ruby - 2nd》中“Standard Protocols and Coercions”一节。 我看了之后有恍然大悟的感觉,原来Ruby的类型转换是这样设计的!Ruby的类型转换设计的十分优秀,让人拍案叫绝! |
|
返回顶楼 | |
发表时间:2007-01-18
grantren 写道 Ruby的类型转换和Java的类型转换是大大不同的。 关于Ruby的类型转换,可以参见《Programming Ruby - 2nd》中“Standard Protocols and Coercions”一节。 我看了之后有恍然大悟的感觉,原来Ruby的类型转换是这样设计的!Ruby的类型转换设计的十分优秀,让人拍案叫绝! 大概在第几页啊,我怎么没有找到这一小节? |
|
返回顶楼 | |
发表时间:2007-01-18
jiyong1001 写道 grantren 写道 Ruby的类型转换和Java的类型转换是大大不同的。 关于Ruby的类型转换,可以参见《Programming Ruby - 2nd》中“Standard Protocols and Coercions”一节。 我看了之后有恍然大悟的感觉,原来Ruby的类型转换是这样设计的!Ruby的类型转换设计的十分优秀,让人拍案叫绝! 大概在第几页啊,我怎么没有找到这一小节? Part III - Ruby Crystallized -- Duck Typing --- Standard Protocols and Coercions 大概在原书的360页。 |
|
返回顶楼 | |