- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 perl 代码中,我以前使用过以下两种写作风格,后来我发现现代 perl 不鼓励这种写作风格:
# Style #1: Using & before calling a user-defined subroutine
&name_of_subroutine($something, $something_else);
# Style #2: Using ($$) to show the number of arguments in a user-defined sub
sub name_of_subroutine($$) {
# the body of a subroutine taking two arguments.
}
最佳答案
&
sigil 在现代 Perl 中不常用于函数调用,原因有两个。首先,它在很大程度上是多余的,因为 Perl 会将任何看起来像函数(后跟括号)的东西视为函数。其次,&function()
的方式有很大区别。和 &function
被执行,这可能会让经验不足的 Perl 程序员感到困惑。在第一种情况下,调用函数时不带参数。在第二种情况下,使用当前 @_
调用函数。 (它甚至可以更改参数列表,稍后在该范围内的语句可以看到:
sub print_and_remove_first_arg {print 'first arg: ', shift, "\n"}
sub test {
&print_and_remove_first_arg;
print "remaining args: @_\n";
}
test 1, 2, 3;
first arg: 1
remaining args: 2 3
&
对于每个函数调用最终都会隐藏几个
&function;
调用可能导致难以找到错误。此外,使用
&
sigil 阻止尊重函数原型(prototype),这在某些情况下可能很有用(如果你知道自己在做什么),但也可能导致难以追踪错误。最终,
&
是功能行为的强大修饰符,仅应在需要该行为时使用。
map
的函数时,此功能非常有用。或
push
或
keys
它们都以不同于标准列表运算符的方式对待他们的第一个参数。
sub my_map (&@) {...} # first arg is either a block or explicit code reference
my @ret = my_map {some_function($_)} 1 .. 10;
sub ($$) {...}
不鼓励使用原型(prototype)的类似用途是因为 10 次中有 9 次作者的意思是“我想要两个 args”,而不是“我想要两个 args,每个 args 都在调用站点上施加标量上下文”。前一个断言写得更好:
use Carp;
sub needs2 {
@_ == 2 or croak 'needs2 takes 2 arguments';
...
}
my @array = (2, 4);
needs2 @array;
&
sigil 和函数原型(prototype)是有用且强大的工具,但仅应在需要该功能时使用。它们的多余使用(或作为参数验证的误用)会导致意外行为并且难以追踪错误。
关于perl - 不鼓励的 perl 习惯用法的起源 : &x(. ..) 和 sub x($$) { ... },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2843745/
我正在编写一个 Point 类(在 3d 空间中)并且一直想知道创建原点的最佳方法是什么。这是基本类(取自 Andy 的示例,以防万一有人想知道基本实现是什么): struct Point {
所以我遇到了 MY: WARNING cannot transform class XYZ java.lang.RuntimeException: Method code too large!
我有一个在 Glassfish 下运行的 Java EE 应用程序。 经过最近的一些更改,我们开始在日志中看到大量语句: [#|2011-12-16T11:20:27.007-0800|INFO|su
使用UncaughtErrorEvent.UNCAUGHT_ERROR时是否可以获得错误和错误事件的目标/起源? 我正在使用复杂的Flash应用程序记录用户的运行时错误,并想知道哪里出现了问题。 Un
既然除了窗口大小之外什么都没有变化,我的程序需要一个完整的核心来在最大化的窗口上渲染场景是否正常? 我在 Windows 上使用 C++ 语言的 Qt 4.7 绘制 150 张尺寸为 1754*124
我正在尝试让我的 Chrome 扩展程序将文件上传到 Google 云端硬盘,但我在授权时遇到了困难。我一直在研究 here 中的代码和说明,但我不知道在开发者控制台中为“Authorized Jav
我在通过 webhook 与 GitHub 连接的服务器上运行 Jenkins。不幸的是,我的构建偶尔会失败,我不知道为什么。有时重新启动 Jenkins ( sudo service jenkins
我在使用 Atmosphere 框架 (https://github.com/Atmosphere/atmosphere) 构建的网络应用程序中启用 CORS 时遇到问题 我的请求类似于: /**
我正在使用 AngularJS 开发一个 Web 应用程序。它包含一个管理界面,该界面依赖于另一个域上的 json-rpc API。 在我的本地环境中,如果我向 API 服务器发出请求(使用 Angu
我正在开发一个同时使用 REST 端点和 SockJS websocket 的服务器应用程序。这曾经在 Spring 5.2 及更低版本下工作正常。 然而,从 5.3 版本开始 ,以下方法存在于org
我刚刚开始使用 angularjs,并且使用 Rails 作为后端 api。我已经成功设置了 Angular rails 资源( https://github.com/FineLinePrototyp
我是 React js 的新手,我正在尝试根据用户输入简单地动态更改 map 但是对于特定位置的搜索请求,此错误会增加 XMLHttpRequest cannot load https://maps.
我对一个我想到的项目做了一些测试,其中涉及使用附近的地方。所以我和大佬一起开始摆弄 Google 的 Places Api。我在我的 map 上使用带有 openstreet 瓷砖的传单。现在一切都很
我是一名优秀的程序员,十分优秀!