请解释一下本代码第3行的内容。
for my $i (0 .. $dim) {
for my $j (0 .. $dim) {
$adj->[$i][$j] = $adj->[$i][$j] ? [$j] : [];
答案 0 :(得分:3)
代码循环遍历数组引用$adj
中的两个维度。据推测,$dim
是维,$i
和$j
遍历从0
到$dim
的数字列表,例如0,1,2,3,4,5
。
对于每个数字组合,检查该数组元素的值的真实性,并为其分配一个新值。如果值为false,则为其分配一个包含索引$j
的数组引用,否则为空数组[]
。
这里使用条件运算符,基本语法为
CONDITION ? FOO : BAR
if CONDITION then FOO else BAR
据推测,数组引用$adj
应该包含数组引用,这就是为什么它可以简单地将真实性检查为defined $adj->[$i][$j]
的快捷方式。
答案 1 :(得分:2)
这是三元运算符,又名条件运算符。
如果$adj->[$i][$j]
为0(或未定义),则[]
会分配给$adj->[$i][$j]
,而在其他情况下,$adj->[$i][$j]
会被归为$adj->[$i][$j]
。
perlop有这样的引用:
三元“?:”是条件运算符,就像在C中一样。它的工作方式与if-then-else非常相似。 如果之前的论点?如果是,则返回:之前的参数,否则返回:之后的参数。
答案 2 :(得分:0)
for my $i (0 .. $dim) {
for my $j (0 .. $dim) {
上面的for循环将使用维度$ dim x $ dim
遍历arry $adj->[$i][$j] = $adj->[$i][$j] ? [$j] : [];
如果$ adj-> [$ i] [$ j]为零,则将[]分配给$ adj-> [$ i] [$ j]否则分配$ j(列值)