Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > $$$ в объявлении функции


Автор: Perl_sapiens 10.5.2008, 15:22
Че-то бродя по .pm файлам наткнулся на странное объявление функции:
Код

# это просто пример
sub FuncX($$$){
  my($q1,$q2,$q3)=@_;
...
}

Я сначало подумал, что ($$$) показывается, сколько обязательных параметров должно передаться функции, но при самостоятельной проверке(поставил $$$$ и передал токо 3 параметра), компилятор перла ничего матного не сказал...
Может кто знает объяснит мне, что это?

Автор: tolkien 10.5.2008, 19:23
Ты правильно подумал. ($$$) просто программист так улучшает читаемость кода

Автор: KSURi 11.5.2008, 01:59
Ммм, по идее компилятор должен ругнуться. Для того прототипы и придумали, чтобы жестко контролировать кол-во и тип входных аргументов (причем еще на этапе компиляции):
Код

C:\>perl -e"sub _($$){1}_(1)"
Not enough arguments for main::_ at -e line 1, at end of line
Execution of -e aborted due to compilation errors.

C:\>
C:\>perl -e"sub _($\@){1}_(1,1)"
Type of arg 2 to main::_ must be array (not constant item) at -e line 1, at end
of line
Execution of -e aborted due to compilation errors.

C:\>


Автор: GoDleSS 11.5.2008, 14:56
Цитата

Я сначало подумал, что ($$$) показывается, сколько обязательных параметров должно передаться функции, но при самостоятельной проверке(поставил $$$$ и передал токо 3 параметра), компилятор перла ничего матного не сказал...
Может кто знает объяснит мне, что это?


1. use strict;
2. А попробуй скормить функции ($$$) четыре параметра и попробовать считать их ;)

Вообще же, на мой вгляд, прототипы штука удобная, особенно на этапах отладки крупных систем.

Автор: JUmPER 11.5.2008, 17:54
прототипы не работают в вызовах методов объектов и вызовах по ссылкам - весьма неплохой повод, чтобы от них совсем отказаться...

PS: они хороши для маленьких встроенных функций, там где лень ставить скобки и перл сам понимает сколько параметров какой функции скормить и извебежать съедания всего списка параметров...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)