Ruby類,模組1

來源:互聯網
上載者:User

標籤:style   blog   io   ar   color   os   使用   sp   on   

類的擴充和繼承
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=1a="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=2puts t.valuet.newmethodclone.newmethod#clone擷取到了為t定義的方法newmethod#dup.newmethod dup沒有獲得為t定義的方法newmethod=begindup和clone都能複製對象的內容資料,唯一不同的是clone方法還能保留與對象相關聯的方法等內容。dup和clone都是淺複製,如果對象中還包含了對其他對象的引用,將不會複製這些包含的對象,而只是複製了它們的引用。=end
序列化
class My_class  attr_accessor :value enda=My_class.newa.value=123#擷取a的序列化字元tempa=Marshal.dump(a)puts tempa#通過序列化字元重建對象b=Marshal.load(tempa)puts b.classputs b.value

=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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.