2012-02-09 42 views
6

Bằng cách tìm kiếm một số blog và bài viết tôi thấy rằng mọi lớp trong Ruby chính nó là một thể hiện của Class. Sự khác biệt giữa các phương thức lớp và các phương thức instance và ruby ​​cho phép tạo đối tượng của đối tượng là gì?Tôi có thể truy cập phương thức lớp và phương thức thể hiện bằng ruby ​​như thế nào?

tôi cố gắng làm một cái gì đó như thế này nhưng vẫn không thể hiểu

str = Class.new(String) 
=> #<Class:0xb5be1418> 

my_str = str.new() 
=> "" 

my_str = str.new("hello") 
=> "hello" 

my_str.class 
=> #<Class:0xb5be1418> 

str.class 
=> Class 

VỚI DOANH NGHIỆP HOÀN TOÀN bối rối nên cho tôi biết về vấn đề này

Trả lời

0
class Dog 
# Returns the number of dog objects created using this class 
def self.count 
end 

# Returns name of the dog object 
def name 
end 
end 

Từ ví dụ trên, phương pháp chung (liên quan đến tất cả các đối tượng con chó) được gọi là class method.

Phương pháp liên quan đến một con chó cụ thể (đối tượng chó) được gọi là instance method.

Theo mô hình đối tượng ruby, Dogconstant trỏ đến một thể hiện của lớp Class. Bất cứ khi nào một phương thức lớp được thêm vào Dog, một lớp mới có tên là Metaclass sẽ được thêm vào trong hệ thống phân cấp lớp để giữ các phương thức lớp.

4

Trong câu đầu tiên bạn tạo lớp vô danh với lớp cha của String:

my_str.class.superclass # => String 

Nhưng đây không phải là bản chất của câu hỏi thực tế của bạn :)

Trường hợp là đối tượng của một số lớp học: String.new() # creates instance of class String. Các cá thể có các lớp (String.new()).class #=> String. Tất cả các lớp thực sự là trường hợp của một lớp Class: String.class # => Class. Các cá thể của lớp Class cũng có superclass - lớp mà chúng kế thừa từ đó.

Phương pháp thể hiện là phương pháp mà bạn có thể gọi đối tượng của một đối tượng.

"st ri ng".split # split is an instance method of String class 

Lớp phương pháp trong Ruby là một thuật ngữ chung cho phương pháp dụ của một đối tượng của lớp Class (bất kỳ lớp).

String.try_convert("abc") # try_convert is a class method of String class. 

Bạn có thể đọc thêm về phương pháp thể hiện và lớp học trong this article.

+2

Để được hoàn toàn nit-pickety, phương pháp lớp là phương pháp singleton của trường hợp Class –

+0

@FrederickCheung, +1, nhưng tôi tin rằng kiến ​​thức này không được yêu cầu cho người mới bắt đầu Ruby để hiểu sự khác biệt giữa Class và phương pháp Instance;) –

Các vấn đề liên quan