Как я могу получить доступ к методу класса и экземпляру метода в ruby? - PullRequest
6 голосов
/ 09 февраля 2012

Просматривая некоторые блоги и статьи, я обнаружил, что каждый класс в Ruby сам является экземпляром Class. В чем разница между методами класса и методами экземпляра и позволяет ли ruby ​​создавать объект объекта?

Я пытаюсь сделать что-то подобное, но все еще не могу понять

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

my_str = str.new()
=> ""

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

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

str.class
=> Class

СЕЙЧАС ПОЛНОСТЬЮ ЗАМЕДЛЕННО, так что расскажите мне об этом

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

В первом предложении вы создаете анонимный класс с суперклассом String:

my_str.class.superclass # => String

Но это не суть вашего актуального вопроса:)

Экземпляр является объектом некоторого класса: String.new() # creates instance of class String. Экземпляры имеют классы (String.new()).class #=> String. Все классы на самом деле являются экземплярами класса Class: String.class # => Class. Экземпляры класса Class также имеют superclass - класс, от которого они наследуются.

Метод экземпляра - это метод, который можно вызывать для экземпляра объекта.

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

Метод класса в Ruby - это общий термин для методов экземпляра объекта класса Class (любой класс).

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

Подробнее о методах экземпляра и класса вы можете прочитать в этой статье .

0 голосов
/ 09 февраля 2012
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

Из приведенного выше примера универсальный метод (который относится ко всем объектам собаки) называется class method.

Метод, связанный с конкретной собакой (объект собаки), называется instance method.

Согласно объектным моделям ruby, Dog - это constant, который указывает на экземпляр класса Class. Всякий раз, когда метод класса добавляется в Dog, новый класс с именем Metaclass будет добавляться в иерархию классов для сохранения методов класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...