[Moscow.pm] Динамические возможности Perl :: помощь коллективного разума

Akzhan Abdulin akzhan.abdulin на gmail.com
Пт Апр 30 08:28:38 PDT 2010


Вы правы, это обычный способ метапрограммирования, с помощью которого легко
делается аналог 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
<andrei.protasovitski на gmail.com>написал:

>
>
> 30 апреля 2010 г. 17:01 пользователь Akzhan Abdulin <
> akzhan.abdulin на gmail.com> написал:
>
> Здесь я определяю метод класса, который ниже в определении же класса
>> вызываю, и он создаёт пару методов экземпляра.
>>
>> 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
> moscow-pm на pm.org | http://moscow.pm.org
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20100430/19fa8cb3/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm