2014-02-18 45 views
0

請解釋一下這段代碼的第3行中發生了什麼。請解釋一下這段代碼的第3行中發生了什麼

for my $i (0 .. $dim) { 
    for my $j (0 .. $dim) { 
     $adj->[$i][$j] = $adj->[$i][$j] ? [$j] : []; 
+1

@Rene將右括號添加到循環中將是不正確的。這是OP發佈的所有代碼。 – TLP

+0

@TLP它當然沒有傷害。 –

回答

2

這是三元運算符,又名條件運算

如果$adj->[$i][$j]爲0(或未定義)然後[]被分配給$adj->[$i][$j],在其他情況下被$adj->[$i][$j]到assigened $adj->[$i][$j]

perlop有這句話:

三元 「?:」 是條件運算符,就像在C.它的工作原理很像一個IF-THEN-ELSE。 如果之前的論點?如果爲true,則返回前面的參數,否則返回後面的參數。

3

該代碼在數組引用$adj中的二維上循環。推測地,$dim是尺寸,並且$i$j遍佈從0$dim的數字列表,例如, 0,1,2,3,4,5

對於數字的每個組合,將檢查該數組元素的值是否正確,並分配一個新值。如果該值爲false,則會爲其分配一個包含索引$j的數組ref,否則爲空陣列ref []

條件運算符用在這裏,與基本語法

CONDITION ? FOO : BAR 
if CONDITION then FOO else BAR 

據推測,數組引用$adj應該包含數組引用,這就是爲什麼它可以簡單地進行真實性檢查爲defined $adj->[$i][$j]一個快捷方式。

0
for my $i (0 .. $dim) { 
     for my $j (0 .. $dim) { 

以上for循環將通過與尺寸$暗淡的ARRY itrate X $暗淡

$adj->[$i][$j] = $adj->[$i][$j] ? [$j] : []; 

如果$形容詞 - > [$ I] [$ j]爲零,然後分配[]以$ adj - > [$ i] [$ j] else assign $ j(column value)