Bear Su's Blog

instance method 與 class method 的差別

Table of Contents

簡單來說,instance method 需要一個實體物件才能呼叫,而 class method 則是可以直接用類別呼叫

class Foo
  # 宣告 class method 需要在 method 名稱前加上 self.
  def self.class_bar
    # ...
  end

  def instance_bar
    # ...
  end
end

# class method 的呼叫方式
Foo.class_bar

# instance_bar 的呼叫方式
Foo.new.instance_bar

由以上範例程式可以看到,instance_bar 方法需要 Foo.new 先建立一個實體物件,才能夠呼叫到 instance_bar 這個 instance method。換句話說類別是無法呼叫 instance method,而實體變數也無法呼叫 class method

另一種宣告 class method 的方法

class Foo
  class << self
    def class_bar1
      #...
    end

    def class_bar2
      #...
    end
  end
end

Monkey patch instance method 與 class method 的方法

class Foo; end

Foo.class_eval do
  def self.class_bar_patch
    # ...
  end

  def instance_bar_patch
    # ...
  end
end

# class method 的呼叫方式
Foo.class_bar_patch

# instance_bar 的呼叫方式
Foo.new.instance_bar_patch

參考資料


Rails 102

RailsTips


如果覺得這篇文章對您有所幫助,歡迎贊助我一杯咖啡 ☕️

祝您有美好的一天 ❤️