Пара слов о перегрузке функций

| Комментариев: 4

А ведь в перле всегда была возможность простой реализации перегрузки функций. Об этом как-то не было смысла задумываться три-четыре года назад, но теперь, когда у нас есть прототип Perl 6, можно и поностальжировать :-)

Сегодня я достал из архивов код, написанный на одном дыхании несколько лет назад (и до сих пор воспользованный). Там есть функция, которая определяет словарную форму слова по ее номеру (то есть просто находит по ID запись в таблице). Сегодня мне потребовалось то же самое, но с возможностью поискать сразу несколько записей.

Чтобы удобно искать как по одному аргументу, так и по списку, хочется, чтобы метод возвращал данные в том же виде: либо скаляром, либо списком.

Ничего сверъестественного:

sub spell {
   my @id = @_;
   my $ids = join ',', grep {/^\d+$/} @id;
   . . .
   return @id < 2 && @base > 0 ? $base[0] : @base;
}

Искуственно выглядит лишь проверка при возврате значения.

А вот была бы С++(Perl 6-)-подобная перегрузка, было бы проще. Ждем-с.

Комментариев: 4

Андрей, исправь id my (@id) = @_;
?

Однако, с форматированием произошла неприятность. Попробую еще раз:

Андрей, исправь id < 2 и скажи, зачем скобки в строке

my (@id) = @_;

?

Чуть странно смотрится, может зря вмешиваюсь, но может как-то так:
sub spell {
my $ids = join ',', grep /^\d+$/, @_;
. . .
return wantarray ? @base : $base[0];
}

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 28.10.2009 22:13. Автор — ash.

Предыдущая запись — Доклады на Baltic Perl Workshop

Следующая запись — «Мой проект», часть 1

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.