Просто добавьте к ответу Мэтта:
Оба примера делают одно и то же, записывая их по-другому:
String = Class.new # < done inside ruby initialization
def String.hello
puts "hello there"
end
и
x = Person.new
def x.hello
puts "hello there"
end
Вкл.В Ruby вы можете добавлять методы в класс, созданный с помощью A = Class.new
или с синтаксисом sugar class A; ...; end
, или в собственный класс, который существует для каждого объекта.Методы класса, по сути, являются методами собственного класса экземпляра класса, думают о том, что является «я» в def self.method; ...; end
.Собственные классы могут быть открыты с помощью этого синтаксиса:
x = Person.new
class << x
# ...
end
Поскольку собственные классы также являются экземплярами класса (попробуйте добавить p self.class
в последнем примере), у них также есть собственные классы и так далее.Если это кажется странным, просто помните, что Object
- это класс, а Class
- это объект.Вот почему я люблю Руби!