Что синтаксисЧто делает «если (1)» делать?
if (1) {}
делать?
Я не могу найти документацию для этого синтаксиса, а 1 не рассматривается как логическое. Я прав?.
Что синтаксисЧто делает «если (1)» делать?
if (1) {}
делать?
Я не могу найти документацию для этого синтаксиса, а 1 не рассматривается как логическое. Я прав?.
1
действительно рассматривается как булево значение в этом случае, которое всегда оценивается как true
.
Это в основном заявление if
, которое всегда проходит (что делает ненужным в первую очередь).
Он управляет кодовым блоком. Это эквивалентно:
{
...
}
Добавил Ikegami:
Нет, это не так.
{ ... }
- это «голой цикл», цикл, который выполняется только один раз. На него влияют next
, last
и redo
.
if (1) { ... }
не является петлей. На него не влияют next
, last
и redo
.
>perl -E"for (1..3) { say $_; if (1) { next; } say $_; }"
1
2
3
>perl -E"for (1..3) { say $_; { next; } say $_; }"
1
1
2
2
3
3
Однако они схожи в том, что оба создают лексическую область.
(Добавление комментария в ответ, чтобы я мог объяснить различия в деталях.) – ikegami
В perl
, следующие значения считаются false
0
Empty String
Все остальное считается true
Итак, if (1)
считается всегда true
В Perl есть другие ложные значения, включая '0.0' и' undef'. – friedo
if(1)
действительно возвращает истину каждый раз, он ничего не делает, кроме определения области действия, аналогичной кодовому блоку
Технически, if (1)
ничего не делает, поскольку это всегда выполненный if-statement.
Одним из распространенных способов использования кода if (1)
является конвертирование кода, который вы хотите быстро отключить, скажем, для целей отладки. Вы можете быстро изменить if (1)
на номер if (0)
, чтобы отключить этот код.
Да, 1 считается истинным, поэтому блок после if (1)
всегда выполняется.
От perldoc
число 0, '0' и "", пустой список Струны(), и UNDEF все ложь в логическом контексте. Все остальные значения верны.
Похож 1 это рассматриваются как логическая истинным в силе того, что if
не оценить ложь. См How do I use boolean variables in Perl?
Если вы сомневаетесь, используйте Deparse
:
$ perl -MO=Deparse -e'if (1) {}'
do {
()
};
-e syntax OK
В Perl, логические утверждения являются ложными, если они возвращают значение 0
и верно обратное. Числовое значение возвращает его значение.
В этом заявлении, пользователь форсирует значение if
заявление, чтобы быть правдой:
if (1) {
print "This statement is always true\n";
}
И, конечно:
if (0) {
print "This statement is false, and you'll never see this printed\n";
}
Пользователь мог бы написать что-то вроде этого тоже :
if (1 == 1) {
print "This statement is always true\n"
}
Обычно вы не видите это в if
. Зачем беспокоиться о if
, если условие всегда верно? Тем не менее, это весьма характерно для while
заявления, если вам нужно бесконечного цикл:
while (1) {
print "Keep doing this over, and over again\n";
}
Обычно есть лазейка:
my $count = 0
while (1) {
$count = $count + 1;
print "The Count is now $count\n";
last if $total > 100;
}
Единственная причина, я могу думать, что кто-то хочет сделать это это какая-то проверка отладки. То есть, большую часть времени заявление было бы ложным, но если установлено верно, распечатать какой-то отладочного заявление:
if (0) { #Change from "0" to "1" to debug
print "DEBUG: The value of foo = $foo\n";
}
Однако существуют более эффективные способы обработки нечто подобное, например, через постоянный:
use constant {
DEBUG => 0,
};
if (DEBUG) {
print "DEBUG: The value of foo = $foo\n";
}
Или через подпрограмму отладки.
Попробуйте применить true/false к целым числам. Вы увидите, что 1 истинно, а 0 - false. – Jimbo