5

语法是什么

if (1) {}

做?

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

4

9 回答 9

19

从技术上讲,if (1)它没有什么有趣的,因为它是一个始终执行的 if 语句。

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

于 2013-07-08T15:48:51.360 回答
7

是的,1 被视为真,因此if (1)总是执行后面的块。

来自perldoc

数字 0、字符串 '0' 和 "" 、空列表 () 和 undef 在布尔上下文中都是错误的。所有其他值都为真。

于 2013-07-08T15:49:35.003 回答
4

1在这种情况下,确实被视为布尔值,其结果始终为true.

这基本上是一个总是if通过的声明(首先使它没有必要)。

于 2013-07-08T15:47:51.747 回答
2

如有疑问,请使用Deparse

$ perl -MO=Deparse -e'if (1) {}'
do {
    ()
};
-e syntax OK
于 2013-07-08T18:04:41.290 回答
2

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

{
  ...
}

池上添加:

不,这不对。

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

if (1) { ... }不是一个循环。它不受nextlast影响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

但是,它们的相似之处在于都创建了一个词法作用域。

于 2013-07-08T15:48:10.613 回答
1

在 Perl 中,布尔语句如果返回值 of 则为假,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";
}

或通过调试子程序。

于 2013-07-08T18:41:59.177 回答
1

看起来 1视为布尔值,因为1if不评估为假。请参阅如何在 Perl 中使用布尔变量?

于 2013-07-08T15:49:53.587 回答
0

perl中,考虑以下值false

0
Empty String

其他一切都被考虑true

所以,if (1)被认为总是true

于 2013-07-08T15:48:26.503 回答
0

if(1)确实每次都返回true,除了定义一个范围,它什么都不做,类似于代码块

于 2013-07-08T15:48:42.020 回答