2016-05-31 141 views
0

我在else if語句中有多個elsif條件。其他多個條件如果條件爲真

如果多個條件爲真,語句的流程是什麼?那麼在下面這個僅僅作爲示範的簡單例子中,是否達到了第二個elsif條件?

my $i = 1; 

if ($i == 1){ 
} 
elsif (i == 2){ 
} 
elsif (i == 1){ 
} 
else{ 
} 
+2

一旦條件成功,測試就會停止,這意味着'$ i = 1'時從未測試過第二個'$ i == 1'。 –

+0

五年來我還沒有寫過別的。我想不出一個elsif。 – k0pernikus

回答

5

容易嘗試:

use feature ":5.10"; 

my $i = 1; 

if ($i == 1) { 
    say "A"; # this is the only branch executed 
} elsif (i == 2) { 
    say "B"; 
} elsif (i == 1) { 
    say "C"; 
} else { 
    say "D"; 
} 

每個elsif如果以前的條件沒有成功,才考慮。您可以看到,甚至沒有嘗試進行比較:

if ($i == 1) { 
    say "A"; 
} elsif (i == 2/0) { # This doesn’t blow up since the comparison is never tried 
    say "B"; 
} else { 
    say "C"; 
} 
+1

(我認爲'2/0'在編譯時死掉,因爲那是在評估'2/0'時,但現在這個異常被延遲了。) – ikegami

2

系統從if語句開始並檢查條件。如果它是真的,它會執行語句的主體,然後跳過其餘的else語句和else語句。如果它是假的,它會下移到第一個else語句列出。同樣的過程發生:檢查條件,如果是true執行正文並跳過其餘的if和else語句;如果錯誤跳轉到下一個else語句。

總之:else if語句從上到下依次選擇。所以,如果你有兩個如果兩個都是真的語句,只有最高的一個會被執行。

1

第一場比賽將贏得其他esle/elsif塊被跳過。

不,第二個elsif塊將無法到達。