請解釋一下這段代碼的第3行中發生了什麼。請解釋一下這段代碼的第3行中發生了什麼
for my $i (0 .. $dim) {
for my $j (0 .. $dim) {
$adj->[$i][$j] = $adj->[$i][$j] ? [$j] : [];
請解釋一下這段代碼的第3行中發生了什麼。請解釋一下這段代碼的第3行中發生了什麼
for my $i (0 .. $dim) {
for my $j (0 .. $dim) {
$adj->[$i][$j] = $adj->[$i][$j] ? [$j] : [];
這是三元運算符,又名條件運算。
如果$adj->[$i][$j]
爲0(或未定義)然後[]
被分配給$adj->[$i][$j]
,在其他情況下被$adj->[$i][$j]
到assigened $adj->[$i][$j]
。
perlop有這句話:
三元 「?:」 是條件運算符,就像在C.它的工作原理很像一個IF-THEN-ELSE。 如果之前的論點?如果爲true,則返回前面的參數,否則返回後面的參數。
該代碼在數組引用$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]
一個快捷方式。
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)
@Rene將右括號添加到循環中將是不正確的。這是OP發佈的所有代碼。 – TLP
@TLP它當然沒有傷害。 –