ruby的類方法和實例方法簡單講解

ruby的類方法與實例方法

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

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

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

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

# Way 1
class Foo
  def self.bar
    puts 'class method'
  end
end
 
Foo.bar # "class method"
 
# Way 2
class Foo
  class << self
    def bar
      puts 'class method'
    end
  end
end
 
Foo.bar # "class method"
 
# Way 3
class Foo; end
def Foo.bar
  puts 'class method'
end
 
Foo.bar # "class method"

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

再看實例方法,這也有幾套方案:

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

foo.lazy  # "instance method3"

 

轉載自:http://www.cnblogs.com/rubylouvre/archive/2010/03/31/1701780.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章