首页 > 代码库 > Ruby类,模块1
Ruby类,模块1
类的扩展和继承
class Fixnum def dosome(str) puts str end def abs puts "覆盖了原有的方法" endendputs 1.class1.dosome("动态添加的方法")1.abs#覆盖原有的方法
freeze冻结对象
class Test attr_accessor :value endt=Test.newt.value=http://www.mamicode.com/1"test"a.freeze#a<<"1" 异常 a<<"1"或导致生成一个新的对象,a=a+"1"还是指向原有的对象a=a+"1"puts a#t.freeze 冻结不能在被修改,所以下面扩展修改该对象就会报错TypeErrordef t.newmethod() puts "t的新方法"enddup=t.dupclone=t.clonet.value=http://www.mamicode.com/2>
序列化
class My_class attr_accessor :value enda=My_class.newa.value=http://www.mamicode.com/123>=begin
对象序列化方式不仅限于Marshal,还有其他方式,Marshal是Ruby内置的模块,性能还是比较出众的
=end
模块
module MyModule def function puts "模块对象方法" end def self.function puts "模块方法" endendmodule MyModule def self.otherfunction puts "模块方法2" end CONST1="模块的常量" module MysubModule CONST1="子模块的常量" endend#p =MyModule.new#p.function 模块是没有实例对象的概念的, 使用new 会抛出异常puts MyModule.classMyModule.functionMyModule.otherfunction#::来引用模块中的模块或者方法,可以看出清晰的层次结构关系,而不同模块中同名的常量或方法也不会造成冲突MyModule::functionputs MyModule::MysubModule::CONST1
加载模块(require,load,include,extend)
#load(‘testxml.rb‘, wrap) #加载testxml.rb文件#require ‘testxml‘ #加载testxml库,通常也是加载testxml.rb文件=beginload和require都是加载相应的模块文件到当前的环境中,load会无条件的加载源文件,不管之前是否加载过。require则会检查,保证模块只被加载过一次,经常用于加载一些扩展库。require和load加载后,被加载文件中的局部变量不会加载进来如果传入的文件不包含路径,会在当前加载的目录下查找搜索=endmodule MyModule def method puts "method" endendclass MyClass include MyModule #因为include作用为混入模块其作用等价于# def method# puts "method"# endendclass MyClass1 extend MyModule #exted方法所扩展的对象取决于调用extend方法的对象,需要注意的是该处的extend,本质上等价于self.extend MyModule #这里的代码中的self指代的是MyClass1类,所以MyModule被定义为MyClass1的类方法# def self.method# puts "method"# endendmy_class=MyClass.new#类中使用include 模块中的方法变成 类的实例方法my_class.method#类中使用extend 模块中的方法变成了 类的方法MyClass1.methodaa="0"#所有对象都可以extend模块而活的模块中的方法,因为aa变量所引用的是一个字符串对象的实例,extend所调用的对象为实例对象#因此extend起作用的也是实例对象aa.extend(MyModule)aa.method=begininclude和extend不会自动加载文件,他们只是将模块混入货扩展已有的模块或类。include会建立一个由类到所包含模块的引用,自动添加为类的实例方法,当模块发生改变是,类中所混入的放发也会发生相应的改变extend和inc极其相似,不过extend是用来在一个对象中引入一个模块,使得这个对象也具有这个模块的方法。=end
Ruby类,模块1
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。