【发布时间】:2010-03-19 04:46:12
【问题描述】:
在 Perl 中,当您有嵌套数据结构时,可以省略对 2d 和更多嵌套级别的取消引用箭头。换句话说,以下两种语法是相同的:
my $hash_ref = { 1 => [ 11, 12, 13 ], 3 => [31, 32] };
my $elem1 = $hash_ref->{1}->[1];
my $elem2 = $hash_ref->{1}[1]; # exactly the same as above
现在,我的问题是,是否有充分的理由选择一种风格而不是另一种风格?
这似乎是一种流行的风格争论(就在 SO,我在 5 分钟内不小心撞到了this 和this)。
到目前为止,几乎没有一个常见的嫌疑人说出任何确定性的话:
- perldoc 只是说“你可以随意省略指针解引用箭头”。
- Conway 的“Perl 最佳实践”说“尽可能使用箭头取消引用”,但它似乎仅适用于取消引用主引用的上下文,不适用于 2d 级别嵌套数据结构的可选箭头。
-
“Mastering Perl for Bioinfirmatics”作者 James Tisdall 也没有给出非常明确的偏好:
“机敏的读者可能有 注意到我们似乎忽略了 数组之间的箭头运算符 下标。 (毕竟这些 匿名数组的匿名数组 匿名数组等,所以 他们不应该写吗 [$array->[$i]->[$j]->[$k]?) Perl 允许这样做;只有箭头运算符 在变量名和 第一个数组下标是必需的。它 让眼睛更轻松, 有助于避免腕管综合症。在 另一方面,您可能更愿意保留 取消引用箭头到位, 明确你正在处理 参考。你的选择。”
已更新“中级 Perl”,根据其合著者 brian d foy 的说法,建议省略箭头。请参阅下面布赖恩的完整答案。
就我个人而言,我支持“始终插入箭头,因为它更具可读性并且更明显他们正在处理参考”。
更新更具体地说:可读性,在下标本身就是表达式的多嵌套表达式的情况下,箭头通过更明显地将下标与一个下标分开来帮助“视觉标记”表达式另一个。
【问题讨论】:
-
brian - 系统没有告诉我你更新了你的答案,抱歉迟到了。
标签: perl syntax coding-style