7

ruby と oop を一般的に学んでいると、私が理解している限りではインスタンス メソッドに似ているが、オブジェクトからではなくクラスからアクセスされ、同時に実行できるのは 1 つだけであるクラス メソッドに出くわしました。

しかし、クラスメソッドと通常のメソッド (クラス外) を使用する理由がわかりません。また、それらの用途は何ですか?

例えば:

#Why would you use:
class Foo
  def self.bar
    puts "Class method"
  end
end

#Versus simply:
def bar
  puts "Normal method"
end

Foo.bar # => Class method
bar # => Normal method

どちらも同じ結果を生成するためですか?私はそれらについてかなり混乱しているので、ここで何か/すべてを誤解している場合は修正してください.

4

5 に答える 5

13

あなたの例は良いものではありません。

クラス メソッドは、クラスの存在するすべてのインスタンスの管理を処理し、インスタンス メソッドは一度に 1 つのインスタンスを処理します。

class Book
  def self.all_by_author(author)
    # made up database call
    database.find_all(:books, where: { author: author }).map do |book_data|
      new book_data # Same as: Book.new(book_data)
    end
  end

  def title
    @title
  end
end


books = Book.all_by_author('Jules Vern')
books[0].title #=> 'Journey to the Center of the Earth'

この例では、という名前のクラスがありBookます。クラスメソッドがありall_by_authorます。ふりをしたデータベースにクエリを実行し、Bookインスタンスの配列を返します。インスタンス メソッドtitleは、単一のBookインスタンスのタイトルを取得します。

したがって、クラス メソッドはインスタンスのコレクションを管理し、インスタンス メソッドはそのインスタンスだけを管理します。


一般に、メソッドがインスタンスのグループで動作する場合、またはそのクラスに関連するコードであるが、単一のインスタンスを直接読み取ったり更新したりしない場合、それはおそらくクラス メソッドである必要があります。

于 2013-08-27T17:39:41.073 に答える
0

誤解が多いのですが、

ruby では、クラスとインスタンスメソッドを定義できます。

クラス メソッドは、クラス レベルで処理を提供するために使用されます。つまり、クラス レベルでのみ使用できるデータ、またはすべてのオブジェクトに関連するデータです。たとえば、クラスに属するオブジェクトの数をカウントするには、クラス メソッドが必要です。お気に入り

Foo.count  

同様に、単一のオブジェクトを処理するには、次のような単一のオブジェクトを処理するためのオブジェクト メソッドが必要です。

obj.save

したがって、クラスメソッドは、オブジェクトが同じメソッドの独自の実装を持つことができるシングルトーンデザインパターンの例です。

于 2013-08-27T17:37:00.427 に答える