Вы правы, это обычный способ метапрограммирования, с помощью которого легко делается аналог Class::Accessor.
Как вы видите, любое замыкание может стать методом любого класса/объекта. И выполнено как на стадии определения, так и на стадии выполнения (определение - это выполнение, где self указывает на сам класс). Правда, методы attr_accessor, attr_reader, attr_writer и т.д. уже определены в базовом Module (http://ruby-doc.org/core/classes/Module.html#M001681) Проблема Perl - он требует хаков для метапрограммирования. 30 апреля 2010 г. 19:13 пользователь Andrei <[email protected]>написал: > > > 30 апреля 2010 г. 17:01 пользователь Akzhan Abdulin < > [email protected]> написал: > > Здесь я определяю метод класса, который ниже в определении же класса >> вызываю, и он создаёт пару методов экземпляра. >> >> class Something >> def self.reporter(*names) >> names.each do |name| >> define_method(name) do >> puts "You have called #{name}" >> end >> end >> end >> >> reporter :ametist, :rubinius >> end >> >> obj = Something.new >> obj.ametist >> obj.rubinius >> >> > Почти так же круто, как Class::Accessor. :-P > > -- > Andrei Protasovitski > < andrei[dot]protasovitski[at]gmail[dot]com > > Diemen, Netherlands > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > >
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
