为什么函数不会在赋值语句中的 void 上下文中生成警告?

问题描述 投票:0回答:1

以下代码将生成警告。 (原因是因为你需要将

1,2,3
括在括号中)。

$ perl -wE'my @foo = 1,2,3;'
Useless use of a constant (2) in void context at -e line 1.
Useless use of a constant (3) in void context at -e line 1.

但是这段代码不会生成警告,

$ perl -wE'sub foo {1}; sub bar {2}; sub baz {3}; my @foo = foo(), bar(), baz();

这对我来说似乎很尴尬。虽然在 void 上下文中执行

foo()
baz()
似乎是合理的,但这似乎没有用,也不像是应该鼓励的事情。如果不出意外,您可能会认为启用警告后捕获上述问题是理想的选择。

这个警告不存在有什么原因吗?

perl warnings void
1个回答
0
投票
my @x = EXPR1, EXPR2, EXPR3;

意味着

( my @x = EXPR1 ), EXPR2, EXPR3;

由于它是在 void 上下文中评估的,所以它相当于

( my @x = EXPR1 ); EXPR2; EXPR3;

或者只是

my @x = EXPR1; EXPR2; EXPR3;

以下肯定是错误的,值得警告:

my @foo = 1; 2; 3;

但是你能对以下内容说同样的话吗?

my @foo = foo(); bar(); baz();
© www.soinside.com 2019 - 2024. All rights reserved.