Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> $$$ в объявлении функции, что это такое? 
V
    Опции темы
Perl_sapiens
Дата 10.5.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



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

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

Я сначало подумал, что ($$$) показывается, сколько обязательных параметров должно передаться функции, но при самостоятельной проверке(поставил $$$$ и передал токо 3 параметра), компилятор перла ничего матного не сказал...
Может кто знает объяснит мне, что это?
PM MAIL   Вверх
tolkien
Дата 10.5.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Ты правильно подумал. ($$$) просто программист так улучшает читаемость кода
PM MAIL   Вверх
KSURi
Дата 11.5.2008, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



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

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:\>



Это сообщение отредактировал(а) KSURi - 11.5.2008, 02:01


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
GoDleSS
Дата 11.5.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 11.2.2007
Где: Пироговский

Репутация: 2
Всего: 2



Цитата

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


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

Вообще же, на мой вгляд, прототипы штука удобная, особенно на этапах отладки крупных систем.
--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
JUmPER
Дата 11.5.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



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

PS: они хороши для маленьких встроенных функций, там где лень ставить скобки и перл сам понимает сколько параметров какой функции скормить и извебежать съедания всего списка параметров...
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0604 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.