问题标签 [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.
perl - Perl - 重新定义子程序
我之前曾问过这个问题,或者搜索并看到其他人问过 - 为什么我会收到警告“ Subroutine mySub redefined at ../lib/Common.pm line x ”?并且您总是得到您在同一代码中两次声明 sub的答案。我创建了这个测试包:
整个文件---------------
整个文件---------------
我使用 perl 脚本中的这个包,它使用其他包,也使用这个包,我收到警告:
子例程 ThisSubroutineIsNotDefinedAnywhereElse 在 ../lib/MyCommonPkg.pm 第 19 行重新定义。
我保证我没有在其他任何地方声明这个子。那么这是由循环引用引起的吗?我该如何着手跟踪并修复此警告的原因?
perl - 我怎么知道我在哪个子程序中?
有没有办法获取一段 perl 代码的封闭子程序的名称?例如:
将输出'foo'
.
function - Fortran 是否通过函数和子例程调用保留内部变量的值?
经过许多痛苦的调试,我相信我已经找到了 Fortran 的一个独特属性,我想在 stackoverflow 上验证它。
我一直注意到的是,至少,内部逻辑变量的值在函数或子程序调用中被保留。
这是一些示例代码来说明我的观点:
这是输出:
如您所见,似乎一旦函数或子例程被调用一次,逻辑变量negative
(如果切换到.TRUE.
)将保持原样,尽管类型声明语句中对negative
to进行了初始化。.FALSE.
当然,我可以通过添加一行否定 = .FALSE 来纠正这个问题。在我的函数和子程序中声明变量之后。
然而,这对我来说似乎很奇怪,这是必要的。
为了可移植性和代码可重用性,语言(或编译器可能)不应该在每次调用子例程或函数时重新初始化所有内部变量吗?
perl - 子例程中的默认参数值
我不知道如何为子例程设置默认参数。这是我考虑的:
如果您只需要一个论点,那效果很好。您将如何为多个参数设置默认值?
我打算这样做:
但这是很多工作......必须有一个更简单的方法;可能是最佳实践?
perl - Perl 中的子例程与脚本
我对 Perl 还很陌生,想知道 Perl 的子例程的最佳实践是什么。子程序可以太大吗?
我现在正在编写一个脚本,它可能需要调用另一个脚本。我是否应该将旧脚本以子程序的形式集成到新脚本中?我需要将一个参数传递给脚本并需要一个返回值。
我猜我必须做某种黑魔法才能从原始脚本中获取输出,所以子程序化它是有道理的,对吧?
perl - 如何在 Perl 中处理子程序重新定义的错误
所以我有一个文件,简而言之有这个问题......
我得到一个错误,说子程序remove
已被重新定义。remove
我知道问题所在,在 POSIX 中调用了一个子例程。但是,我不知道如何处理它。这个问题通常是如何解决的?
multithreading - 如何使用线程来替换 perl/pdl 中的循环子例程
我有一个非常好的 perl 子例程,作为 perl 模块的一部分编写。在不涉及太多细节的情况下,它将一个字符串和一个简短列表作为参数(通常取自终端)并输出一个值(现在,总是一个浮点数,但可能并非总是如此。)
现在,我的论点的列表部分采用两个值,例如 (val1,val2)。我使用 for 循环将子例程的输出保存为 val1 和 val2 的数百个不同值。每次迭代几乎需要一秒钟才能完成——因此完成整个过程需要几个小时。
我最近读到了一个神秘的(对我而言)名为“线程”的计算工具,它显然可以用极快的执行时间代替 for 循环。我一直无法理解这些是什么和做什么,但我想它们与并行计算有关(我希望我的模块尽可能针对并行处理器进行优化。)
如果我将要传递给 val1 的所有值保存为一个列表,比如 @val1 和 val2 相同,我如何使用这些“线程”为 val1 和 val2 的元素的每个组合执行我的子例程?此外,了解如何将此过程推广到也采用 val3、val4 等的子例程会很有帮助。
perl - 在 Perl 中,如何检查给定函数是从哪个模块导入的?
我有一个调用该函数的代码。但我不知道这个函数属于哪个模块。我需要它来修改这个功能。
我怎样才能检查它?
perl - 我应该在 Perl 中使用嵌套子例程吗?
我有 5 个 Perl 文件,它们是我环境中 5 种不同状态的验证脚本。
它们中的每一个都至少有几个子例程。
到目前为止,状态的数量被限制为 5 个并且这些工作正常。但是现在,根据当前的设计,我还有 20 多个环境状态,因此还有 20 个 Perl 脚本。
我想将所有五个脚本移到一个脚本中,该脚本将状态作为参数,并为 5 个不同的状态提供 5 个不同的子例程。
这样,当我需要为另一个状态添加验证时,我只需要定义一个新的子例程而不是一个全新的 Perl 脚本。
问题是这意味着使用嵌套的子例程(已知会遇到问题),或展开子例程本身。
例如,
原始脚本
合并脚本
我应该怎么做才能解决这个问题?
perl - 如何在 Perl 中调用名称是哈希值的子例程?
什么是正确的调用方式route()
?