use*_*439 7 ruby oop methods class
学习ruby和oop一般来说,我遇到了类方法,据我所知,它们就像实例方法,但是可以从类而不是从对象访问,并且只能同时运行一个.
但是,我不明白为什么你会使用普通方法(类外)的类方法,甚至它们的用途是什么?
例如:
#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
Run Code Online (Sandbox Code Playgroud)
因为它们都产生相同的结果?我对他们很困惑,所以如果我误解了这里的任何事情,请纠正.
Ale*_*yne 13
你的榜样不是很好.
类方法可能会处理管理类中存在的所有实例,而实例方法一次只处理一个实例.
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'
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我们有一个名为的类Book.它有一个类方法all_by_author.它查询一些伪装数据库并返回一个Book实例数组.实例方法title获取单个Book实例的标题.
因此,管理实例集合的类方法和实例方法仅管理该实例.
通常,如果方法将对一组实例进行操作,或者是与该类相关但不直接读取或更新单个实例的代码,则它可能应该是类方法.