ruby的類方法與執行個體方法

來源:互聯網
上載者:User

類方法也叫靜態方法,通過類名來調用的方法。執行個體方法,必須要new一個執行個體出來才能用。

class Foo  def self.bar    puts 'class method'  end    def baz    puts 'instance method'  endendFoo.bar #class method#Foo.baz #報錯 undefined method `baz' for Foo:Class (NoMethodError)Foo.new.baz #instance method#Foo.new.bar #報錯  undefined method `bar' for #<0x2d61a1c> (NoMethodError)

當中bar就是類方法,看它是如何定義的:def self.bar,self就是指向當前的類。而對於執行個體方法,就很簡單:def baz。

像ruby這樣靈活的指令碼語言不多見,它提供了多種定義類方法的手段。

# Way 1class Foo  def self.bar    puts 'class method'  endendFoo.bar # "class method"# Way 2class Foo  class 

第一種與第三種方式不細說了,self的運用就相當於javascript的this。第二種有種自繼承的意味。通過我們添加多個類方法時就少寫幾個self,非常優雅。

再看執行個體方法,這也有幾套方案:

# Way 1class Foo  def baz    puts 'instance method1'  endendFoo.new.baz # "instance method1"puts '---------------'# Way 2class Foo  attr_accessor :bazendfoo = Foo.newfoo.baz = 'instance method2'puts foo.baz# "instance method2"puts '---------------'# Way 3class Foo; endfoo = Foo.newdef foo.lazy  puts 'instance method3'endfoo.lazy  # "instance method3"

第一種直接定義,第二種用到attr_accessor文法糖,第三種是極晚綁定,此方法只對那一個執行個體有效。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.