Ruby近来高频率的出现在我们的视野里,很多人都有一个共识是Ruby在开发中具有很高的的高效性,很多人从他们熟悉的语言像Python,Java等充满激情的转向了Ruby,然而,作为初学者,可能对Ruby有些怀疑,尤其是Ruby在大的工程中使用,作为有经验的Java开发者,这些怀疑可能与他们的一些经验有关,因此,有些人就会要问:Ruby是否能够适应于大型的工程项目呢?
在Artima社区里,有人通过研究Ruby的面向对象的特性发现:
Ruby里的类从不关闭,你总能在现有的类中添加方法,你自己按照标准写的类,标准的,内嵌的类也是如此,你所做的就是为一个存在的类来进行类的定义,而且你所指定的新的内容也被添加进去.
同时,你也能够修正一个在已经存在的类中的方法,例如,我们考虑如下代码:
上述例子中方法清单的语义已经被改变了,如果数组为空,方法的第一各注释并没有产生异常,第二各个也是,在某些环境下,这可能是一个有用的特性.在Java中,如果在工程中处理java.util.ArrayList,那么你可以不必过多的考虑他的语义,而在Ruby中,要处理Array,你就一定小心他的语义在某处被改变,当然,检查的地方越多,所花的时间也就越多,你能相信在大的工程中,每个开发者改变任何范围中的任何类的语法不会有问题吗?class Folder
def initialize(name)
@name = name
@files = Array.new
end
![]()
def addFile(newFile)
@files.push(newFile)
end
![]()
def list
puts @name+":"
for i in 0...@files.length
puts "--"+@files[i]
end
end
![]()
end
![]()
#base semantics
aFolder = Folder.new("reports")
aFolder.list
puts "here we're ..."
![]()
#...............
#...............
#...............
![]()
#...............
#...............
#...............
![]()
![]()
#override
class Folder
def list
puts @name+":"
if @files.length == 0
raise "empty folder!"
end
![]()
for i in 0...@files.length
puts "--"+@files[i]
end
end
end
![]()
#modified semantics
aFolder = Folder.new("reports")
aFolder.list
puts "never reached!!"
