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

Ruslan Zakirov ruslan.zakirov на gmail.com
Пт Апр 30 08:49:22 PDT 2010


2010/4/30 Akzhan Abdulin <akzhan.abdulin на gmail.com>:
> Кстати, вспомнил про объекты-синглтоны. Это объекты, которые обладают
> уникальными свойствами и методами, отсутствующими у других объектов того же
> класса.

Тут какая-то путаница вышла. Синглетон - это классы с гарантировано
одной сущностью. Еще применяется вариации с фиксированым набором
сущностей, например в зависимости от параметра.

Отдельное пространство имен объекта и класса - это клево и в перл тоже
делается, но хитро и возможно по этому редко используется.

Делается это rebless'ом в сгенеренный пакет, то есть если у вас есть
объект класс X и вы хотите добавить метод только этому объекту, то вы
генерите пакет 'X::SPACE_'. refaddr($self), туда сохраняете метод, @{
X::SPACE_'. refaddr($self) }{ISA} = 'X'; и делаете rebless. Немного
отполировать и скорее всего будет вполне приемлимо работать.


> Они вполне часто используются в Ruby, но я не знаю аналога в Perl. В Perl
> пакет - это класс, и методы принадлежат пакету, а не объекту.
>
> 30 апреля 2010 г. 18:42 пользователь Denis Evdokimov
> <evdokimov.denis на gmail.com> написал:
>>
>> > К сожалению, сам постулат неверен. До возможностей метапрограммирования
>> > в
>> > Ruby далековато пока.
>> > Ведь само описание класса в Ruby является объектом и уже исполняется, со
>> > всеми вытекающими.
>> Не могу согласиться, в перле, в рантайме можно сделать абсолютно всё,
>> что вообще можно сделать на перле => Всё верно.
>> P.S. Вполне допускаю, что в руби так же можно всё, и возможно, что там
>> что-то удобнее.
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>



-- 
Best regards, Ruslan.


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