2013-07-08 8 views
4

Что синтаксисЧто делает «если (1)» делать?

if (1) {} 

делать?

Я не могу найти документацию для этого синтаксиса, а 1 не рассматривается как логическое. Я прав?.

+0

Попробуйте применить true/false к целым числам. Вы увидите, что 1 истинно, а 0 - false. – Jimbo

ответ

4

1 действительно рассматривается как булево значение в этом случае, которое всегда оценивается как true.

Это в основном заявление if, которое всегда проходит (что делает ненужным в первую очередь).

1

Он управляет кодовым блоком. Это эквивалентно:

{ 
    ... 
} 

Добавил 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 

Однако они схожи в том, что оба создают лексическую область.

+0

(Добавление комментария в ответ, чтобы я мог объяснить различия в деталях.) – ikegami

0

В perl, следующие значения считаются false

0 
Empty String 

Все остальное считается true

Итак, if (1) считается всегда true

+0

В Perl есть другие ложные значения, включая '0.0' и' undef'. – friedo

0

if(1) действительно возвращает истину каждый раз, он ничего не делает, кроме определения области действия, аналогичной кодовому блоку

19

Технически, if (1) ничего не делает, поскольку это всегда выполненный if-statement.

Одним из распространенных способов использования кода if (1) является конвертирование кода, который вы хотите быстро отключить, скажем, для целей отладки. Вы можете быстро изменить if (1) на номер if (0), чтобы отключить этот код.

7

Да, 1 считается истинным, поэтому блок после if (1) всегда выполняется.

От perldoc

число 0, '0' и "", пустой список Струны(), и UNDEF все ложь в логическом контексте. Все остальные значения верны.

2

Если вы сомневаетесь, используйте Deparse:

$ perl -MO=Deparse -e'if (1) {}' 
do { 
    () 
}; 
-e syntax OK 
1

В 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"; 
} 

Или через подпрограмму отладки.

Смежные вопросы