请解释一下这段代码第3行中的内容。
for my $i (0 .. $dim) {
for my $j (0 .. $dim) {
$adj->[$i][$j] = $adj->[$i][$j] ? [$j] : [];
代码在数组引用$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
大概,数组ref $adj
应该包含数组引用,这就是为什么它可以简单地检查是否为已defined $adj->[$i][$j]
的快捷方式。
这是三元运算符 ,又称条件运算符 。
如果$adj->[$i][$j]
为0(或未定义),则将[]
分配给$adj->[$i][$j]
,在其他情况下,将$adj->[$i][$j]
被关联到$adj->[$i][$j]
adj- $adj->[$i][$j]
。
perlop有这样的报价:
与C中一样,三元“?:”是条件运算符。它的工作方式与if-then-else非常相似。 如果在论点之前? 如果为true,则返回:之前的参数,否则返回:之后的参数。
for my $i (0 .. $dim) {
for my $j (0 .. $dim) {
上面的for循环将遍历arry,尺寸为$ dim x $ dim
$adj->[$i][$j] = $adj->[$i][$j] ? [$j] : [];
如果$ adj-> [$ i] [$ j]为零,则将[]分配给$ adj-> [$ i] [$ j],否则分配$ j(列值)