Иллюстрированный самоучитель по Perl

Методы

Вызов метода

Существуют две синтаксические формы вызова как методов класса, так и методов объекта.

Первая форма имеет вид:

method class_or_object, parameters

…например:

$somebody = new Staff, {"имя" › "Анна"}; # метод класса
showdata $somebody, "имя","фамилия"; # метод объекта
showdata {"имя" › "Мария","возраст" › 18}; # метод объекта
showdata new Staff "возраст"; # метод объекта
showdata setdata hew Staff, {"имя" › "Глеб"}, "имя"; # метод объекта

Данная форма представляет собой обычный вызов функции, который может быть вложенным в другой вызов. Первым аргументом функции является ссылка (для методов объекта) или/им^Гпакета (для методов класса).

В приведенном примере первая строка содержит вызов конструктора new, в котором первым (и единственным) аргументом является имя пакета.

Вторая строка содержит вызов метода объекта, в котором первым аргументом является объект-ссылка.

В третьей строке первый аргумент задается при помощи блока {}, возвращающего ссылку на анонимный хеш-массив. Данный хеш-массив не будет объектом, так как он не объявлен объектом класса staff при помощи функции bless о, но синтаксически такая конструкция возможна.

В четвертой строке метод объекта вызывается с двумя аргументами. Первым аргументом является ссылка, возвращаемая конструктором new (), вторым – строка "возраст".

В пятой строке конструктор new создает объект, который передается в качестве первого аргумента методу setdata. Вторым аргументом метода setdata является ссылка на анонимный хеш-массив {"имя" › "Глеб"). Метод showdata в качестве первого аргумента использует ссылку, возвращаемую методом setdata, а в качестве второго аргумента – строку "имя".

Вторая форма обращения к методу имеет вид:

class_or_obj ect – >method(parameters)

Например, предыдущие вызовы могут быть записаны также в виде:

$somebody = Staff › new(("имя" › "Анна"});
$somebody › showdata("имя","фамилия");
new Staff › showdata("возраст");
new Staff › setdata({"имя" › "Глеб"}) › showdata("имя");

Вторая форма требует обязательного заключения аргументов в скобки.

Замечание
Как видим, обе формы записи могут быть достаточно сложными. В разных случаях любая из них может оказаться предпочтительной в смысле читаемости текста программы. Если нет серьезных оснований против, то рекомендуем использовать вторую форму, исходя из следующих соображений.

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

$obj › {keyname} › method().
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.