函数和过程具有相同名称和参数列表,包括不带参数的情况。区分这两者并没有问题,因为它们在代码中的使用方法不同。
无效的超载
两个超载程序具有不同数量的非缺省参数,导致歧义的参数列表。
两个程序具有单个参数,数据类型相同但参数名不同。
两个程序具有相同的名称,具有单个参数,但却是同系列中不同的数据类型。
一个程序没有参数,第二个程序具有一个带缺省值的参数。
一个程序具有 N 个参数,第二个程序具有 N+1 个参数,全部带有缺省值。
一个程序具有 N 个参数,其中 N-1 个参数有缺省值;第二个程序具有 N+1 个参数,其中最后两个缺省。
一个程序具有一个参数,第二个程序具有两个参数,其第二个参数有缺省值。
我肯定还将考虑其他测试方案,但这些已足够继续进行了。如何最好地进行上述方案的测试?我需要在程序包中定义这些不同的结合。让我们称之为 allargs_test.为每个测试方案使用一个不同的超载程序名称,可能效果会较好。这样可以保持事情清晰易辨而且非常有条理。实际上,我要创建一个表。此表有助于工作但还不够。我还需要为这些测试方案分别指定期望的结果。它是有效的超载吗?如果不是,它是如何失败的?我如何用一种能使用 utPLSQL 自动运行测试的方式来获取这种信息?问题太多了。
在本文中,我没有指定所有测试方案的结果全集;我认为大致了解全部过程就足够了。
考虑 samefamily1 过程。以下是这一超载的详细说明:
CREATE OR REPLACE PACKAGE allargs_test IS PROCEDURE samefamily1 (arg IN NUMBER);PROCEDURE samefamily1 (arg IN INTEGER);
很清楚,arg 参数的数据类型太相似了,它们都属于数字型。因此,这将是导致故障的歧义超载。对 samefamily1 运行 Codecheck 的结果应该类似于:
allargs_test.samefamily:invalid overloading
结果看来是很基本的东西。我们只须说是或不是吗?或者说无效或有效?在本例中,我想是这样的。但我们再来看另一个更有趣的情况。考虑 noparms2 的开头部分:
|
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容 本站提醒:不要进行人身攻击。谢谢配合。 |