Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Перегрузка операторов в perl

Автор вопроса: snoofkinОтветов: 1

Предполагая, что у меня есть благословенные ссылки/объекты $a и $b, каждая из которых хранится внутри как хэш-ссылка и имеет:

$a->{_x}
$b->{_x}

можно ли перегрузить арифметические операции, поэтому, когда я сделаю это:

my $c = $a + $b;

У меня будет благословенная ссылка $c с $c->{_x} равным $a->{_x} + $b->{_x}??

operator-overloadingperl

Ответы

Ответ 1 · рейтинг 6 · Oleg V. Volkov

Конечно. Просто используйте свой обычный конструктор для нового объекта желаемого класса в перегруженном подразделе для + и установите его значение в эту сумму (или что-то еще, что вы хотите).

Предполагая, что у вас есть конструктор new, который принимает начальное значение в качестве аргумента, это будет что-то вроде:

sub plus {
   my $self = shift;
   my $right = (shift or 0);
   return MySuperNumberObject->new($self->{_x} + $right);
};

use overload '+' => \+

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы