【发布时间】:2020-12-29 08:48:30
【问题描述】:
假设我有,
use experimental 'signatures';
sub foo ($bar) { return 0 };
现在如果我在没有正确arity 的情况下调用它,我会得到一个错误。
# Too few arguments for subroutine 'main::foo'
foo()
# Too many arguments for subroutine 'main::foo'
foo(1,2);
但是,我该如何测试它。假设我想确保有人实现了package Bar,这样它的函数foo 需要一个参数。有没有办法在不运行该代码的情况下做到这一点。
我认为这个问题与my other question 不同,因为即使我无法通过某种 Perl API 读取签名,也可能有一种方法可以测试子例程是否使用特定签名声明?这个问题的答案可以用来回答这个问题。但是这个问题的答案可能无法回答那个问题。
【问题讨论】:
-
也许更好的问题是,为什么要测试子程序是否正确使用?大多数 Perl 代码都可能被误用,需要有知识的用户来编写 Perl 代码。
标签: perl signature subroutine arity