2013-07-08 64 views
4

是什么语法“if(1)”做什么?

if (1) {} 

吗?

我无法找到此语法的文档,1不被视为布尔值。我对吗?。

+0

尝试将真/假转换为整数。你会看到1是真的,0是假的。 – Jimbo

回答

4

1确实被视为布尔值,在这种情况下总是计算为true

这基本上是一个if声明,其中总是通过(首先使它不必要)。

1

它运行代码块。这相当于:

{ 
    ... 
} 

池上补充:

不,不是这样的。

{ ... }是一个“裸循环”,一个只执行一次的循环。它受next,lastredo的影响。

if (1) { ... }不是一个循环。它不受next,lastredo的影响。

>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)每次的确返回true,它除了定义范围外什么也不做,类似于代码块

19

从技术上讲,if (1)没有什么意思,因为它是一个永远执行的if语句。

if (1)的一个常见用途是将您希望能够快速禁用的代码封装起来,例如用于调试目的。您可以快速将if (1)更改为if (0)以禁用该代码。

7

是的,1被视为true,所以总是执行if (1)之后的块。

perldoc

数字0,字符串 '0' 和 “”,空列表(),和民主基金是在布尔上下文全是假的。其他所有值都是正确的。

2

有疑问时,可使用Deparse

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

在Perl中,布尔语句是假的,如果他们返回0和值为true,否则。数值返回其值。

在该声明中,用户被强迫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?然而,这对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; 
} 

我能想到有人会想这样做的唯一原因是某种调试检查。也就是说,大部分时间的说法是假的,但如果设置为true,打印出某种调试声明:

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

或通过调试子程序。