我正在阅读Learning Perl第6版,子程序章节中有以下代码:
foreach (1..10) {
my($square) = $_ * $_; # private variable in this loop
print "$_ squared is $square.\n";
}
Run Code Online (Sandbox Code Playgroud)
现在我理解列表语法,即括号,用于区分列表上下文和标量上下文,如:
my($num) = @_; # list context, same as ($num) = @_;
my $num = @_; # scalar context, same as $num = @_;
Run Code Online (Sandbox Code Playgroud)
但是在foreach循环的情况下,我无法看到列表上下文是如何合适的.
我可以将代码更改为:
foreach (1..10) {
my $square = $_ * $_; # private variable in this loop
print "$_ squared is $square.\n";
}
Run Code Online (Sandbox Code Playgroud)
它的工作方式完全相同.那么为什么作者使用我的($ square)时可以使用简单的我的$ square?
这种情况有什么不同吗?
当然在这种情况下,括号不是必需的.从他们确实做作者的意图的角度来看,他们并没有严格的错误.和Perl一样,有很多方法可以做到.
所以有一个潜在的问题:作者为什么选择这样做?我一开始想知道这是作者的首选风格:也许他总是选择将他的新变量列表放在括号中,以便类似于:
my ($count) = 4;
Run Code Online (Sandbox Code Playgroud)
括号没有做任何有用的事情,至少看起来与以下内容一致:
my ($min, $max) = (2, 3);
Run Code Online (Sandbox Code Playgroud)
但是看一下整本书,除了你引用的部分之外,我找不到一个使用括号的单个例子的例子.作为众多示例中的一个示例,第9章中的列表上下文部分中的m //包含my带有赋值的各种不同用法,但不使用带有任何单个值的括号.
我得出的结论是,正如作者my在子程序中介绍的那样,my($m, $n);他试图在下次使用时尽可能少地改变语法,最后用my($max_so_far),然后尝试解释标量和列表上下文,如上所述.我不确定这是非常有用的.
TL; DR没有必要,虽然它实际上并没有错.在您的代码中避免这种风格可能是一个好主意.
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |