![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| alexey9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 4.10.2006 Репутация: нет Всего: нет |
Добрый день.
Подскажите как узнать существует ли функция? В кратце:
Так вот собственно как узнать существует ли сама функция под именем $callBackFn и как ей отдать параметры при таком вызове? Заранее спасибо. |
|||
|
||||
| Nab |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Параметр как обычно:
А наличие никак, только по ошибке при вызове:
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
||||
|
|||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc UNIVERSAL
|
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Ну и причем здесь это? Где говориться о классах, методах, объектах? -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# perl -MUNIVERSAL -de0
main::(-e:1): 0 DB<1> sub AA () { return 1; } DB<2> p main->can ("AA") CODE(0x8eaaac4) DB<3> p main->can ("aa") DB<4> |
|||
|
||||
| tishaishii |
|
||||||||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Читай. Вот вариант:
Вариант без доработки:
А это самый простой и надёжный:
Добавлено @ 16:16 В общем виде:
Это сообщение отредактировал(а) tishaishii - 20.3.2007, 16:22 |
||||||||
|
|||||||||
| alexey9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 4.10.2006 Репутация: нет Всего: нет |
Черт, забыл уточнить, извините. Это все еще и касательно класса. Ну то есть так:
Это сообщение отредактировал(а) alexey9 - 20.3.2007, 17:24 |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Нe блин, alexey9, двойка за постановку вопроса.
ответ: метод can базового класса UNIVERSAL, читайте внимательно документацию... arto, приношу извинения, тами метод can можно применить не только для неприведенной ссылки. Как побочный еффект того что пакет и класс в Perl практически идентичные понятия, то:
вполне рабочий код, и он хоть и не описан в документации, и может в принципе в будущих версиях оказаться не рабочим, я в этом сильно сомневаюсь, уж слишком это все завязано... и думаю это более удобный вариант чем то что привел, tishaishii. А он в своем репертуаре.... без поллитра не разобраться -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Поздравляю, Nab, ты лапух.
UNIVERSAL::can работает гоооорааааздо медленнееееее, чем defined. Проверено 10 раз. Используй defined и будь в моём репертуаре. |
|||
|
||||
| Nab |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
О премудрейший tishaishii, есди бы ты научился свой простейший код писать без ошибок, то тебя понимали бы и лопухи типа меня с полу-слова, или полу-взгляда... А вообще конечно вариант лучший... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
||||
|
|||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Nab, хватит ёрничать. Какие-то ошибки придумал себе ещё. Тут ты уже начинаешь, как автор статьи "Про вред "популярного языка программирования Perl" говорить.
Это сообщение отредактировал(а) tishaishii - 21.3.2007, 21:16 |
|||
|
||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
арто - отжег...
это мне напоминает одного парня с хпоинта -------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Ну и шо с тем делать?
Придётся ещё подключать консоль для ввода\вывода. Нафига? |
|||
|
||||
| Ramirez |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Извиняюсь за некропостерство, но всетаки мой вопрос относится к этой дискуссии:
а что если у меня есть объект, как узнать есть у него метод или нет (кроме как через UNIVERSAL::CAN)? Хочется использовать defined а никак не могу найти способа использовать его при проверке наличия метода у объекта. вот единственное что я придумал, но тут eval, a это ГОРАЗДО медленнее can:
вот такой код:
выдает вот такой удручающий результат:
Это сообщение отредактировал(а) Ramirez - 2.12.2008, 14:24 |
||||||
|
|||||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
eval придумали для того, чтобы выполнять строки как код, а can придумали для того, чтобы проверять существование ф-ий/м-ов.
Результат вашего бенчмарка это подтверждает (а значит вовсе он и не удручающий). А кстати, зачем вам вообще здесь eval? Это сообщение отредактировал(а) KSURi - 2.12.2008, 17:56 -------------------- Died at Life.pl line 21 |
|||
|
||||
| Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
А я не знаю другого способа вызвать метод, который динамически задается в процессе выполнения скрипта.
Но в данном примере я хотел только проверить наличие, и обычно пользовался методом CAN. но сравнив насколько UNIVERSAL::CAN проигрывает методу defined захотелось найти альтернативу. но кроме eval ничего в голову не пришло. дело в том, что у метода UNIVERSAL::CAN есть одно преимущество: имя метода ему передается в переменной. |
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Это сообщение отредактировал(а) KSURi - 8.12.2008, 22:37 -------------------- Died at Life.pl line 21 |
|||
|
||||
| Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Результаты интересные.
а вот за эту конструкцию, отдельное спасибо. я так и не смог до нее додуматься:
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |