首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Perl的原型有什么缺点吗?

使用Perl的原型有什么缺点吗?
EN

Stack Overflow用户
提问于 2015-08-05 16:16:21
回答 2查看 161关注 0票数 0

我将调用我的subs而不使用参数列表中的括号。例如,我想用

代码语言:javascript
复制
mypush \@list, $item;

而不是

代码语言:javascript
复制
mypush(\@list, $item);

为了做到这一点,我已经声明我的潜艇有一个原型。

代码语言:javascript
复制
sub mypush (+@) { push shift, @_ }

事实上,这也允许我做以下几点,但这只是一个额外的好处:

代码语言:javascript
复制
mypush @list, $item;

除了在代码中的任何地方使用原型之前都必须声明带有原型的子程序之外,在Perl中使用原型有什么严重的缺陷吗?

在我看来代码绝对更干净。但是,一般来说,原型会在哪里出错呢?我什么时候会后悔?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-06 09:37:05

最大的缺点之一是它使代码更难维护。很少有人知道Perl原型实际上做了什么,所以他们周围有很多猜测和货物剔除。

但是请注意,Perl5.20添加了一个子程序签名特性。它仍然是实验性的,但它真的很棒,和大多数人期望的原型所做的。而且,当我们添加类型约束时(哦,圣诞老人,请给我带来那些圣诞礼物--我保证我会做得很好!),我们会有我认为大多数人尝试用原型做的事情(用我编的一些语法):

代码语言:javascript
复制
sub foo (Int $foo, String $var, Int @array) { ... }
票数 5
EN

Stack Overflow用户

发布于 2015-08-05 19:35:28

你的问题是没有意义的,因为原型对父母的需求没有任何影响。只要在使用之前已经声明了该子文件,那么parens是可选的。

代码语言:javascript
复制
$ perl -E'
   sub foo { say @_; }
   foo "bar";
'
bar

$ perl -E'
   sub foo;
   foo "bar";
   sub foo { say @_; }
'
bar

请注意,省略父母有严重的不利因素。

  1. 很容易意外地将错误的参数传递给一个子程序: $ perl -E‘sub (例如@_;} foo 9*6;foo (4+5)*6;’54 9
  2. 代码中的错误可能导致误导和混淆错误消息。 $ perl -E'foo bar "baz";‘无法通过包“"bar”定位对象方法"foo“(也许您忘记加载”bar“了?)在-e第1行。 这里是另一个例子,当你省略父母的时候,你就会发现它的古怪之处。

这些问题可以说比使用原型所产生的问题更糟糕。使用这两种“特性”似乎都不明智;引入这两组问题就更不明智了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31837759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档