问题标签 [subroutine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
33030 浏览

perl - Perl - 重新定义子程序

我之前曾问过这个问题,或者搜索并看到其他人问过 - 为什么我会收到警告“ Subroutine mySub redefined at ../lib/Common.pm line x ”?并且您总是得到您在同一代码中两次声明 sub的答案。我创建了这个测试包:

整个文件---------------

整个文件---------------

我使用 perl 脚本中的这个包,它使用其他包,也使用这个包,我收到警告:

子例程 ThisSubroutineIsNotDefinedAnywhereElse 在 ../lib/MyCommonPkg.pm 第 19 行重新定义。

我保证我没有在其他任何地方声明这个子。那么这是由循环引用引起的吗?我该如何着手跟踪并修复此警告的原因?

0 投票
1 回答
165 浏览

perl - 我怎么知道我在哪个子程序中?

有没有办法获取一段 perl 代码的封闭子程序的名称?例如:

将输出'foo'.

0 投票
3 回答
7474 浏览

function - Fortran 是否通过函数和子例程调用保留内部变量的值?

经过许多痛苦的调试,我相信我已经找到了 Fortran 的一个独特属性,我想在 stackoverflow 上验证它。

我一直注意到的是,至少,内部逻辑变量的值在函数或子程序调用中被保留。

这是一些示例代码来说明我的观点:

这是输出:

如您所见,似乎一旦函数或子例程被调用一次,逻辑变量negative(如果切换到.TRUE.)将保持原样,尽管类型声明语句中对negativeto进行了初始化。.FALSE.

当然,我可以通过添加一行否定 = .FALSE 来纠正这个问题。在我的函数和子程序中声明变量之后。

然而,这对我来说似乎很奇怪,这是必要的。

为了可移植性和代码可重用性,语言(或编译器可能)不应该在每次调用子例程或函数时重新初始化所有内部变量吗?

0 投票
9 回答
16589 浏览

perl - 子例程中的默认参数值

我不知道如何为子例程设置默认参数。这是我考虑的:

如果您只需要一个论点,那效果很好。您将如何为多个参数设置默认值?

我打算这样做:

但这是很多工作......必须有一个更简单的方法;可能是最佳实践?

0 投票
4 回答
468 浏览

perl - Perl 中的子例程与脚本

我对 Perl 还很陌生,想知道 Perl 的子例程的最佳实践是什么。子程序可以太大吗?

我现在正在编写一个脚本,它可能需要调用另一个脚本。我是否应该将旧脚本以子程序的形式集成到新脚本中?我需要将一个参数传递给脚本并需要一个返回值。

我猜我必须做某种黑魔法才能从原始脚本中获取输出,所以子程序化它是有道理的,对吧?

0 投票
4 回答
14741 浏览

perl - 如何在 Perl 中处理子程序重新定义的错误

所以我有一个文件,简而言之有这个问题......

我得到一个错误,说子程序remove已被重新定义。remove我知道问题所在,在 POSIX 中调用了一个子例程。但是,我不知道如何处理它。这个问题通常是如何解决的?

0 投票
1 回答
1761 浏览

multithreading - 如何使用线程来替换 perl/pdl 中的循环子例程

我有一个非常好的 perl 子例程,作为 perl 模块的一部分编写。在不涉及太多细节的情况下,它将一个字符串和一个简短列表作为参数(通常取自终端)并输出一个值(现在,总是一个浮点数,但可能并非总是如此。)

现在,我的论点的列表部分采用两个值,例如 (val1,val2)。我使用 for 循环将子例程的输出保存为 val1 和 val2 的数百个不同值。每次迭代几乎需要一秒钟才能完成——因此完成整个过程需要几个小时。

我最近读到了一个神秘的(对我而言)名为“线程”的计算工具,它显然可以用极快的执行时间代替 for 循环。我一直无法理解这些是什么和做什么,但我想它们与并行计算有关(我希望我的模块尽可能针对并行处理器进行优化。)

如果我将要传递给 val1 的所有值保存为一个列表,比如 @val1 和 val2 相同,我如何使用这些“线程”为 val1 和 val2 的元素的每个组合执行我的子例程?此外,了解如何将此过程推广到也采用 val3、val4 等的子例程会很有帮助。

0 投票
4 回答
3819 浏览

perl - 在 Perl 中,如何检查给定函数是从哪个模块导入的?

我有一个调用该函数的代码。但我不知道这个函数属于哪个模块。我需要它来修改这个功能。

我怎样才能检查它?

0 投票
3 回答
1390 浏览

perl - 我应该在 Perl 中使用嵌套子例程吗?

  • 我有 5 个 Perl 文件,它们是我环境中 5 种不同状态的验证脚本。

    它们中的每一个都至少有几个子例程。

  • 到目前为止,状态的数量被限制为 5 个并且这些工作正常。但是现在,根据当前的设计,我还有 20 多个环境状态,因此还有 20 个 Perl 脚本。

  • 我想将所有五个脚本移到一个脚本中,该脚本将状态作为参数,并为 5 个不同的状态提供 5 个不同的子例程。

    这样,当我需要为另一个状态添加验证时,我只需要定义一个新的子例程而不是一个全新的 Perl 脚本。

  • 问题是这意味着使用嵌套的子例程(已知会遇到问题),或展开子例程本身。

例如,

原始脚本

合并脚本

我应该怎么做才能解决这个问题?

0 投票
2 回答
3657 浏览

perl - 如何在 Perl 中调用名称是哈希值的子例程?

什么是正确的调用方式route()