gpt4 book ai didi

perl - 关于优先级+重复修饰符的问题

转载 作者:行者123 更新时间:2023-12-01 06:32:50 25 4
gpt4 key购买 nike

请您向我解释一下这种明显不一致的行为:

use strict;
my @a;

print "a" x 2; # this prints: aa
@a = "a" x 2; print @a; # this prints: aa

print ("a") x 2; # this prints: a
@a = ("a") x 2; print @a; # this prints: aa

最后一个不应该打印一个'a'吗?

编辑:好的,现在这对我来说更有意义:
“二进制“x”是重复运算符……在列表上下文中,如果左操作数被括在括号中或者是由 qw/STRING/形成的列表,则它重复列表。” perlop

这对我来说就像泥巴一样清晰(二进制 x - 为什么使用二进制这个词?是否有一个 denary X?)
但无论如何:
@a = ("a") x 2 # 似乎在列表上下文中,因为我们在开头有一个数组 - 数组不是列表,但它包含一个列表,所以我认为我们可能有一个列表上下文,(不是数组上下文,尽管它们可能是同义词)。

我想“左操作数”是(“a”)。 (要么是那个要么@a)。 perlop 并没有说明操作数实际上是什么,查询 perldoc.perl.org 给出“未找到匹配项”,而谷歌搜索给出“在计算机编程中,操作数是一个用于描述任何能够被操作的对象的术语。”比如一个数组。

所以左操作数可能被括在括号中,所以它可能应该“重复列表”。该列表是: ("a") x 2或者是: ("a")
如果我们重复 ("a") x 2我们会得到 ("a") x 2 ("a") x 2 .这似乎不对。

如果我们输入: print $a[1]我们将得到一个'a',所以“它重复列表”意味着Perl变成 ("a") x 2进入 ("a", "a")所以我们有效地得到 @a=("a", "a")
然而, print ("a") x 2没有变成 ("a", "a") .那是因为 print 是一个具有高优先级的“列表运算符”。所以我们有效地得到: (print ("a")) x 2
数组是一个术语,因此它也具有较高的优先级,但@a=stuff 涉及赋值运算符 =,它具有相对较低的优先级。所以它与打印品完全不同。

最佳答案

添加 use warnings;在你的脚本中,你会得到 警告 喜欢

print (...) interpreted as function .
Useless use of repeat (x) in void context .

喜欢就去做 print (("a") x 2); # 这会打印: aa
正如你在评论中提到的,如何格式化你的代码,我会说见 Perltidy .

联系我们 是一个 Perl 脚本,它缩进和重新格式化 Perl 脚本,使它们更易于阅读。如果您编写 Perl 脚本,或花大量时间阅读它们,您可能会发现它很有用。

关于 的更多信息联系我们 :

您可以下载 perltidy并运行它
使用其默认值,或自定义它以使用您喜欢的支撑样式、缩进宽度等。

定制很容易,并且有大量的选择。默认值通常是一个很好的起点。

Perltidy 还可用于生成代码的彩色 HTML 输出。

Perltidy 带有一组合理的默认值;但它们可能不适合您。幸运的是你可以使用 tidyview 作为图形用户界面来预览 perltidy 对您的代码的更改并查看哪些选项最适合您。您可以下载 tidyview来自 CPAN。

注意:始终添加 use strictuse warnings在脚本的开头。

关于perl - 关于优先级+重复修饰符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com