![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| meridian |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 8.11.2005 Репутация: нет Всего: нет |
Еще раз привет всем!
Подскажите, можно объявить и инициализировать переменные след образом ?
Добавлено через 11 минут и 53 секунды или все таки надо писать так
|
||||
|
|||||
| sir_nuf_nuf |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
В этом случае $varS2, $varS3 будут неопределны, т.е. будут иметь значения undef. В этом ничего особо плохого нет. Перл преобразует undef в пустую строку и 0, если понадобится, хотя и покажет предупреждение.
в этом случае все будут по нулям. Это сообщение отредактировал(а) sir_nuf_nuf - 27.11.2009, 22:59 |
||||
|
|||||
| meridian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 8.11.2005 Репутация: нет Всего: нет |
С первым случаем так и получилось. Использовал второй.
Спасибо! |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
Пожалуйста...
Кстати, если переменных много можно писать так:
где 20 >= количеству переменных. |
|||
|
||||
| meridian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 8.11.2005 Репутация: нет Всего: нет |
Спасибо, тема!
|
|||
|
||||
| ad280379 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2009 Репутация: нет Всего: нет |
значение будет иметь false а не undef в некоторых случаях преобразование в пустую строку или ноль приводит к получению значения true например: my $str; if (defined($str)) - вернет false if ($str) - вернет false а вот если будет my $srt=0 или $str="" if (defined($str)) - вернет true if ($str) - вернет false Это сообщение отредактировал(а) ad280379 - 2.12.2009, 19:36 |
||||
|
|||||
| meridian |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 8.11.2005 Репутация: нет Всего: нет |
Полезно, сэнкс. |
||||||
|
|||||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Смелое утверждение! Но вынужден Вас огорчить, значение будет именно undef. То, что undef в булевом контексте дает false - совершенно справедливо. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| ad280379 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2009 Репутация: нет Всего: нет |
||||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
ad280379, поясните
sir_nuf_nuf, написал, что интерпретатор преобразует значение undef в 0 там где нужно числовое значение и в пустую строку, там, где нужно строковое значение. Как нужно интерпретировать Вашу фразу
? -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| ad280379 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2009 Репутация: нет Всего: нет |
просто прочитать все вместе. к тому же у меня указан контекст if sir_nuf_nuf данный контекст не указал my $dec=1; my $str; $result=$str+$dec; $result=$str.$dec; Это сообщение отредактировал(а) ad280379 - 2.12.2009, 20:22 |
||||||
|
|||||||
| ginnie |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Хорошо, "придерусь" к другой фразе
Надеюсь, я правильно понял, что речь в ней идет о преобразовании undef? Можно увидеть пример, подтверждающий Ваши слова? В тех примерах, что Вы приводили не было преобразования undef. Вот мой пример, показывающий, что преобразования, производимые интерпретатором никак на значение undef в булевом контексте не влияют.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||||
|
|||||||
| ad280379 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2009 Репутация: нет Всего: нет |
нет, не правильно. речь не идет об использовании функции undef() я говорил о разнице применения в зависимости от контекста. для тек кто не понял сути вашего примера напишу по проще
оба раза "Not Defined" |
||||||
|
|||||||
| sir_nuf_nuf |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
ad280379, давайте расставим все точки на ё, что бы люди могли извлечь пользу из сего треда.
Итак: 1) В обоих случаях $b будет иметь значение undef.
2) переменная, имеющая значение undef при необходимости преобразуется в пустую строку или 0
3) в перле есть (явно упомянаются в документации) 3 конекста: - скалярный - списковый - void - контекст часто имеет смысл говорить про: - boolean контекст (в условном выражении) Как я понимаю (точно знает ginnie) при использовании чего то в boolean контексте, это что то сначала оценивается в скалярном контексте, а потом полученное значение преобразуется в истину\ложь по описанным правилам. 4) при использовании undef переменной в булевом контексе, ее значение оцениевает в скалярном контексе как 0, и следственно как false. С самой переменной естественно ничего не происходит 5) и неопределнные (undef) и определенные но нуленвые (0 или пустая строка) переменные и пустые массивы в Boolean контексте оцениваются как false. что бы различать когда переменная неопределена, а когда она нулевая - есть функция defined.
|
||||||
|
|||||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |