gpt4 book ai didi

perl - 在 perl 中从函数返回 +{} 或 {} 与返回 ref 或 value 之间的区别

转载 作者:行者123 更新时间:2023-12-04 04:47:01 27 4
gpt4 key购买 nike

我刚开始在一个新团队新地方工作。他们告诉我我们在 perl 模块中返回 ref 而不是 value。我还看到了 return +{foo=>'bar'}; and return {foo=>'bar'}; 之类的东西有什么不同?以及是否返回 ref 或 value?

最佳答案

+return +{foo=>'bar'}完全没用。

首先,一些背景。

Perl 语言有歧义。举个例子

sub f {
{ } # Is this a hash constructor or a block?
}
{ }是 block 的有效语法(“裸循环”)。 { }是哈希构造函数的有效语法。
两者都可以作为声明!

所以 Perl 不得不猜测。 Perl 通常会正确猜测,但并非总是如此。你可以给它“提示”。一元- +可以用来做到这一点。一元- +是一个完全透明的算子;它什么都不做。但是,它后面必须跟一个表达式(而不是语句)。 { }作为表达式只有一个可能的含义。
+{ }   # Must be a hash constructor.

同样,您可以欺骗 Perl 以另一种方式猜测。
{; }   # Perl looks ahead, and sees that this must be a block.

下面是一个 Perl 猜错的例子:
map { {} } 1..5   # ok. Creates 5 hashes and returns references to them.
map {}, 1..5 # XXX Perl guesses you were using "map BLOCK LIST".
map +{}, 1..5 # ok. Perl parses this as "map EXPR, LIST".

至于问题中的代码, return后面必须跟一个表达式(如果有的话),所以对于 return { ... }; 只有一种可能的解释,所以 +在那里完全没用。

大多数人只在必要时消除歧义。其他人可能会添加 +每当它模棱两可时(即使 Perl 猜对了)。但这是我第一次听说使用 +在每个哈希构造函数前面。

关于perl - 在 perl 中从函数返回 +{} 或 {} 与返回 ref 或 value 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100478/

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