语法是什么
if (1) {}
做?
我找不到此语法的文档,并且 1 没有被视为布尔值。我对吗?。
从技术上讲,if (1)
它没有什么有趣的,因为它是一个始终执行的 if 语句。
虽然的一个常见用途if (1)
是包装您希望能够快速禁用的代码,例如用于调试目的。您可以快速更改if (1)
为if (0)
禁用代码。
1
在这种情况下,确实被视为布尔值,其结果始终为true
.
这基本上是一个总是if
通过的声明(首先使它没有必要)。
如有疑问,请使用Deparse
:
$ perl -MO=Deparse -e'if (1) {}'
do {
()
};
-e syntax OK
它运行代码块。它相当于:
{
...
}
池上添加:
不,这不对。
{ ... }
是一个“裸循环”,一个只执行一次的循环。它受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
但是,它们的相似之处在于都创建了一个词法作用域。
在 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";
}
或通过调试子程序。
看起来 1被视为布尔值,因为1if
不评估为假。请参阅如何在 Perl 中使用布尔变量?
在perl
中,考虑以下值false
0
Empty String
其他一切都被考虑true
所以,if (1)
被认为总是true
if(1)
确实每次都返回true,除了定义一个范围,它什么都不做,类似于代码块