Никто из пишущих на Ruby не задумывался, каким механизмом получаются у классов их методы? Ведь каждый класс в Ruby является объектом класса Class.

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

Дело в том, что в Ruby есть т.н. singleton методы. Это методы, которые определяются для конкретного экземпляра.

@a = Article.new def @a.funny_method puts “This method works for only one instance” end

Так вот хитрость в том, что те самые статические методы класса есть не что иное, как singleton методы объекта Article, являющегося экземпляром класса Class.

Я до этого допер только во время написания драйвера, когда ковырялся с C-шным интерфейсом в руби.

Sidebar