当前位置:  开发笔记 > 编程语言 > 正文

散列键周围的引用是Perl中的一个好习惯吗?

如何解决《散列键周围的引用是Perl中的一个好习惯吗?》经验,为你挑选了6个好方法。

在Perl中使用哈希时引用键是一个好主意吗?

我正在研究一个非常大的遗留Perl代码库,并试图采用Damian Conway在Perl最佳实践中提出的许多最佳实践.我知道最佳实践对于程序员来说总是一个敏感的话题,但希望我能在没有开始火焰战争的情况下得到一些好的答案.我也知道这可能是很多人不会争论的原因,因为它是一个小问题,但我正试图在我通过这个代码库工作时得到一个可靠的指南列表.

在Damian Conway的Perl Best Practices一书中,有一个例子展示了对齐如何帮助一段代码的易读性,但它没有提及(我可以找到书中的任何地方)引用哈希键的任何内容.

$ident{ name   } = standardize_name($name);
$ident{ age    } = time - $birth_date;
$ident{ status } = 'active';

这不是更好用引号来写,以强调你没有使用裸言?

$ident{ 'name'   } = standardize_name($name);
$ident{ 'age'    } = time - $birth_date;
$ident{ 'status' } = 'active';

ForYourOwnGo.. 34

没有报价更好.它在{}所以很明显你没有使用裸字,而且它更容易阅读和输入(少两个符号).但当然,所有这些都取决于程序员.



1> ForYourOwnGo..:

没有报价更好.它在{}所以很明显你没有使用裸字,而且它更容易阅读和输入(少两个符号).但当然,所有这些都取决于程序员.


不使用引号还有一个额外的好处,就是当你使用双引号和插值字符串时,你永远不会在脚下射击.`print"Hello $ planet {"Earth"} \n"`; 会导致语法错误,而`print"Hello $ planet {Earth} \n";`则不会.

2> John Siracus..:

指定常量字符串散列键时,应始终使用(单个)引号.例如, $hash{'key'} 这是最好的选择,因为它不需要考虑这个问题并导致格式一致.如果您有时不使用引号,则必须记住在键包含内部超量,空格或其他特殊字符时添加它们.在这些情况下,您必须使用引号,导致格式不一致(有时不引用,有时引用).引号键也更可能由编辑器突出显示语法.

这里有一个例子,使用"有时引用,而不引用其他时间"约定会让你陷入困境:

$settings{unlink-devices} = 1; # I saved two characters!

那将在下面编译得很好use strict,但是在运行时不会完全按照你的期望进行.哈希键是字符串.字符串应根据其内容引用:单引号用于文字字符串,双引号用于允许变量插值.引用你的哈希键.这是最安全的约定,也是最简单的理解和遵循.


$ settings {unlink-devices} = 1;实际上是做什么的?
@Despertar您可以通过运行`perl -MO = Deparse -e“ $ settings {unlink-devices} = 1”`来看到它,它产生`$ settings {unlink -'devices'} = 1;`。[unlink](http://perldoc.perl.org/functions/unlink.html)是一个函数。您最终将获得`$ settings {0} = 1`。

3> jrockway..:

我从来没有单引号哈希键.我知道{}基本上像引号一样工作,除非在特殊情况下(a +和双引号).我的编辑也知道这一点,并给了我一些基于颜色的线索,以确保我按照我的意图行事.

在任何地方使用单引号在我看来就像是一个不懂Perl的人所做的"防御性"练习.节省一些键盘磨损并学习Perl :)

随着咆哮,我发布此评论的真正原因......其他评论似乎错过了+将"取消引用"裸字的事实.这意味着你可以写:

sub foo {
    $hash{+shift} = 42;
}

要么:

use constant foo => 'OH HAI';
$hash{+foo} = 'I AM A LOLCAT';

所以很明显,这+shift意味着"调用sh​​ift函数"并shift意味着"字符串'移位'".

我还要指出,cperl-mode正确地突出了所有各种情况.如果没有,请在IRC上ping我,我会解决它:)

(哦,还有一件事.我在Moose中引用属性名称,就像在has 'foo' => ....这是我从使用stevan时习惯的习惯,虽然我觉得它看起来不错......但它与其余部分有点不一致我的代码.也许我会很快停止这样做.)



4> chaos..:

无引号哈希键接受了Larry Wall的语法级注意,以确保它们没有理由不是最佳实践.不要出汗.

(顺便提一下,数组键上的引号 PHP的最佳实践,如果不能使用它们会有严重后果,更不用说大量的E_WARNING了.好的Perl!=在PHP中没问题.)


引号
PHP的最佳实践,如果不能使用它们会有严重后果,更不用说大量的E_WARNING了.好的Perl!=在PHP中没问题.)
某个地方是否有关于拉里沃尔的采访或文章?我很想读它.

5> Joe Casadont..:

我不认为这是最好的做法.我个人在哈希键中使用它们,如下所示:

$ident{'name'} = standardize_name($name);

但不要在箭头操作符的左侧使用它们:

$ident = {name => standardize_name($name)};

不要问我为什么,这就是我这样做的方式:)

我认为你能做的最重要的事情就是永远,永远,永远:

use strict;
use warnings; 

这样,编译器将为您捕获任何语义错误,使您不太可能错误地输入内容,无论您决定采用哪种方式.

第二个最重要的是要保持一致.



6> Schwern..:

我没有引号,只是因为打字和阅读并不用担心.我有一个不会被自动引用的键的时间很少而且很远,以至于不值得所有额外的工作和杂乱.也许我选择的哈希键已经改变以适合我的风格,这也是一样的.完全避免边缘情况.

这与我"默认使用的原因相同.对于我来说,在字符串中间放置一个变量比使用我不想插入的字符更常见.也就是说,我经常写的'Hello, my name is $name'"You owe me $1000".

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有