|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Yury Kopyl 2:5020/400 20 Apr 2004 10:03:10 To : Artem Chuprina Subject : Re: OOP perl -------------------------------------------------------------------------------- Artem Chuprina -> "Re: OOP perl" : IF>>>>> Кстати, относительно новомодности. Вот смотрю я на грядущее - IF>>>>> perl6 - и что-то оно мне ну очень не нравится. Может, разубедит IF>>>>> кто? YK>>>> ожидал большего. Работа с объектами как была на уровне "заката YK>>>> солнца вручную", так и осталась. AC>>> IMHO как раз вот уж что-что, а объекты в современном perl AC>>> реализованы как раз очень хорошо. Для парадигмы perl. Чистым AC>>> ОО-языком его делать смысла нет, а из нечистых его подход мне AC>>> нравится больше всего. Причем, я бы сказал, все ровно наоборот - AC>>> никакого заката вручную, все на полном автопилоте. YK>> Было бы не плохо, если бы private/protected, abstract, finalize, YK>> static (методы/переменные класса) были все таки встроенными, а не YK>> танца с бубном за счет Attribute::Handle. AC> Hе надо пытаться делать из перла язык типа "шаг влево, шаг вправо AC> приравнивается к бегству". Возможность же пользоваться одним и тем Я же не говорю, что это нужно обязательно. Hо если будут такие директивы на уровне синтаксиса - уже будет счасте. AC> же методом и как static, и как обычным методом, рулит, а не AC> наоборот. А со static переменными в перле, я бы сказал, гораздо AC> лучше, чем в ОО языках... ну давай рассмотрим пример: как сейчас,в лоб: sub test{ #static shift if (UNIVERSAL::isa($_[0],$package)); my (@vars)=@_; ... }; можно вызывать: MyClass::test(@vars); MyClass->test(@vars); $MyClassInstance->test(@vars); и параметры будут передаваться правильно но гораздо лучше было бы: static sub test{ my (@vars)=@_; }; Сейчас у меня сделано через Attribute::Handlers sub :static test { my (@vars)=@_; }; ----------------- use Attribute::Handlers; sub UNIVERSAL::static : ATTR(CODE) { my ($package, $symbol, $code, $attr, $data) = @_; no warnings 'redefine'; *{$symbol} = sub { shift if (UNIVERSAL::isa($_[0],$package)); $code->(@_); }; }; минус - приходится подключать каждый раз модуль. Yury Kopyl aka hrg | http://id.totem.ru | "мы не пьем - мы лечимся..." --- ifmail v.2.15dev5.3 * Origin: IAC Samara-Internet, Ltd. (2:5020/400) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/102775be33b0b.html, оценка из 5, голосов 10
|