2013-07-08 63 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"; 
} 

或通過調試子程序。