作者:文伯雅寧19 | 来源:互联网 | 2023-05-26 11:05
嗨,我正在研究一些基于数组的代码,我得到了以下内容:
@array; #contains lines of text
for (0 .. $#array - 2)
{
#code here
}
0 ..
语法的目的是什么?基于这个例子它会做什么?这与写作foreach(@array -2)
有何不同?
1> TLP..:
..
是范围运算符.它可以以两种相当不同的方式使用,具体取决于它发生的上下文.在这种情况下,您正在使用列表上下文,在这种情况下您的代码
for (0 .. $#array - 2)
类似于
for (local $_ = 0; $_ <= $#array - 2; $_++)
换句话说,它创造了一系列的数字,从0
到$#array - 2
.
范围运算符也可以在标量上下文中使用,在这种情况下,它会跟踪状态.但这是另一个问题.
这不同于
foreach(@array -2)
请注意,在此表达式中,运算符将数组@array
放在标量上下文中-
,并返回其大小.它只会为for
循环创建一个值,这就是数组的大小减去2.假设列表有10个元素,那么你得到:
foreach (8)
这只是一个项目列表(数字8
)的循环,并不是很有用.所以区别很大,而且无法解释,真的.我认为你的意思是:
foreach (@array[0 .. $#array - 2])
这是使用数组切片的循环.在这种情况下,您循环遍历数组的值,而不是索引.例如
for (0 .. $#array) {
print $array[$_];
}
VS
for (@array) {
print $_;
}
你可能也注意到,for
并foreach
意味着在Perl完全一样的东西.它们是彼此的别名,它们的工作方式没有区别.