Một lớp singleton trong các thuật ngữ đơn giản nhất là một lớp đặc biệt ruby hỗ trợ các phương thức lưu trữ được xác định trên các đối tượng riêng lẻ. Trong ruby, có thể xác định các phương thức trên các đối tượng riêng lẻ là duy nhất cho riêng đối tượng đó. Ví dụ, hãy xem xét những điều sau đây
class User; end
user = User.new
def user.age
"i'm a unique method"
end
user1 = User.new
user.age
user1.age
Như bạn có thể thấy ở trên, đối tượng user1 không phản hồi phương thức 'age' vì nó là một phương thức singleton, một phương thức được định nghĩa duy nhất trên đối tượng người dùng. Để điều này xảy ra, ruby tạo ra một lớp đặc biệt, được gọi là lớp singleton, hoặc lớp eigenclass, để lưu trữ phương thức duy nhất này. Bạn có thể xác minh điều này bằng cách làm như sau:
user.singleton_class
Bạn cũng có thể hỏi ruby xem phương thức 'age' có được tìm thấy ở đây hay không bằng cách sử dụng đối tượng method để tìm nơi phương thức 'age' được xác định. Khi bạn làm điều này, bạn sẽ thấy rằng lớp singleton có phương thức đó.
user_singleton_class = user.method(:age).owner
user.method(:age).owner == user.singleton_class
user_singleton_class.instance_methods(false)
Cũng lưu ý rằng, đối với một lớp singleton, các phương thức singleton thực sự là phương thức thể hiện của nó.
user.singleton_methods == user_singleton_class.instance_methods(false)