Как Вы создаете объекты в Perl?

Лучшее описание функции filter - https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Obiekty/Array/filter

] Вы должны просто выполнить функцию:

function conditionFun(element, index, array) {
   return element >= 10;
}
filtered = [12, 5, 8, 130, 44].filter(conditionFun);

И вы не можете получить доступ к значению переменной до его назначения

12
задан Matt Sheppard 31 August 2008 в 12:38
поделиться

7 ответов

Необходимо определенно смотреть на Moose .

package Point;
use Moose; # automatically turns on strict and warnings

has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');

sub clear {
    my $self = shift;
    $self->x(0);
    $self->y(0);
}

Американский лось дает Вам (среди прочего) конструктора, методы доступа и тип, проверяющий бесплатно!

Так в Вашем коде Вы можете:

my $p = Point->new({x=>10 , y=>20}); # Free constructor
$p->x(15);     # Free setter
print $p->x(); # Free getter
$p->clear();
$p->x(15.5);   # FAILS! Free type check.

А хорошая начальная точка Moose::Manual и Moose::Cookbook

, Если Вам просто нужен основной материал, можно также использовать Mouse , который не так завершен, но без большей части штрафа времени компиляции.

23
ответ дан 2 December 2019 в 03:16
поделиться

Американский лось , определенно.

package Person;
use Moose;
has age => ( isa => Int, is => 'rw'); 
has name => ( isa => Str, is => 'rw'); 
1;

Сразу, у Вас есть бесплатно новое () метод, и методы доступа для атрибутов, с которыми Вы просто определили, 'имеют'. Так, можно сказать:

my $person = Person->new();
$person->age(34);
$person->name('Mike');
print $person->name, "\n";

и так далее. Не только, что, но и Ваши методы доступа прибывают проверенные в типе бесплатно (и можно определить собственные типы, а также стандартные). Плюс Вы добираются, 'расширяется' для разделения на подклассы, 'с' для ролей/черт и всего способа другого большого материала, который позволяет Вам продолжать реальное задание написания хорошего устойчивого удобного в сопровождении кода OO.

TMTOWTDI, но эти работы.

8
ответ дан 2 December 2019 в 03:16
поделиться

В настоящее время я использую Объект:: InsideOut каждый раз, когда я хочу объекты, его довольно хорошее и дам Вам много функций по стандарту бывшие благословленные объекты хеша. Однако если бы я запускал новый проект, то я серьезно посмотрел бы на Американского лося.

, В то время как хорошо прочитать официальную документацию Perl, я был бы НЕ , рекомендуют пробовать к роли Вашу собственную объектную платформу или создать объекты с помощью хешей, его далекого к тому, чтобы заставлять взять легкую дорогу и "достигнуть максимума" непосредственно в объекты "частные" переменные, полностью повреждающие инкапсуляцию, это возвратится, чтобы укусить Вас, когда Вы захотите осуществить рефакторинг объект.

5
ответ дан 2 December 2019 в 03:16
поделиться

Объекты Perl только благословлены хеши. Они - бывшие благословленные ССЫЛКИ. Они могут быть (и чаще всего), бывшие благословленные ссылки хеша, но они могли так же, как легко быть благословлены скалярные или ссылки на массив.

5
ответ дан 2 December 2019 в 03:16
поделиться

Официальное учебное руководство на сайт CPAN хорошо.

существует также хорошая статья, названная КОРМА Camel в CodeProject.

3
ответ дан 2 December 2019 в 03:16
поделиться

На одном футе каждый класс является пакетом; Вы устанавливаете (несколько, при желании) наследование путем установки переменной пакета @ISA (предпочтительно во время компиляции); Вы создаете объект из существующей части данных (часто, но не всегда, анонимный хеш, используемый для хранения переменных экземпляра), благословляют (ССЫЛКА [ИМЯ КЛАССА]); Вы называете методы объекта как $obj-> methodname (@ARGS) и методы класса как "ИМЯ КЛАССА"-> methodname (@ARGS). Порядок разрешения метода множественного наследования может быть изменен с помощью mro.

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

1
ответ дан 2 December 2019 в 03:16
поделиться

Я настоятельно рекомендую взглянуть на Moose, если вы хотите выполнять объектно-ориентированную разработку на Perl. Однако это не очень полезно, если вы не понимаете, что означает объектно-ориентированный объект в Perl. Чтобы лучше понять, как Perl OO работает под капотом, я написал обзор в своем блоге: http://augustinalareina.wordpress.com/2010/06/06/an-introduction-to-object-oriated-perl/

С точки зрения структуры данных объект является справочным с некоторыми дополнительными функциями. Интерпретатор знает, что нужно рассматривать эти специальные ссылки как объекты, потому что они были «благословлены» ключевым словом «bless». Благословенные ссылки содержат флаг, указывающий, что они являются Объектами. По сути, это означает, что вы можете определять и вызывать для них методы.

Например, если вы создали базовый хэш-адрес, это не сработает: $ hashref-> foo ();

Но если вы создадите благословенный хэш-адрес (он же объект), это действительно сработает: $ blessed_hashref-> foo ();

Moose - отличный модуль для ООП в Perl, потому что он создает обязательный объектно-ориентированный уровень и автоматически обрабатывает методы доступа, поэтому вам не нужно определять кучу геттеров и сеттеров. Если вы заинтересованы в использовании Devel :: Peak, чтобы увидеть, как интерпретатор Perl хранит объекты, перейдите по ссылке на запись в блоге, которую я разместил выше.

2
ответ дан 2 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: