Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 当不是所有参数都传入时,如何调用父方法?_Oop_Coldfusion_Components - Fatal编程技术网

Oop 当不是所有参数都传入时,如何调用父方法?

Oop 当不是所有参数都传入时,如何调用父方法?,oop,coldfusion,components,Oop,Coldfusion,Components,我有一个ColdFusion父组件,其函数如下所示: public numeric function myFunction(var1, var2, var3, var4, var5){ ... function code ... } 然后我有一个子组件,它扩展了这个组件,并具有以下功能: public numeric function myFunction(var1, var2, var3){ super.myFunction(var1, var2, var3, variab

我有一个ColdFusion父组件,其函数如下所示:

public numeric function myFunction(var1, var2, var3, var4, var5){
    ... function code ...
} 
然后我有一个子组件,它扩展了这个组件,并具有以下功能:

public numeric function myFunction(var1, var2, var3){
    super.myFunction(var1, var2, var3, variables.var4, variables.var5);
} 
其中
variables.var4
variables.var5
是子级的属性

问题是var1、var2和var3是可选的。如果其中任何一个未传入,则在调用
super.myFunction
时会出现错误:

Variable VAR2 is undefined

如何使用实际传入的两个子属性中的参数调用父方法?(无意大利面条条件编码)

以下代码有效:

public numeric function myFunction(var1, var2, var3){
    arguments.var4 = variables.var4;
    arguments.var5 = variables.var5;
    return super.myFunction(argumentCollection=arguments);
} 

然而,这感觉有点不舒服。这是一个可以接受的解决方案吗?有更好的解决方案吗?

您只需要在函数调用中定义参数的范围吗?类似于
super.myFunction(arguments.var1、arguments.var2、arguments.var3、variables.var4、variables.var5)@Miguel-F-不,我实际上在我的实际方法中对它们进行了范围分析,但在简化它以解决问题时却失去了这一点。问题是,如果其中一个参数没有实际传入,那么它就没有定义,不能传递给
super
函数。我不能只传递整个
参数
结构,因为我还需要传递属性中的另外两个参数。谢谢!这正是我想要的。我就是搞不懂语法,如果允许显式传递一些参数,在集合中传递一些参数,我很惊讶你可以混合使用单个参数名和argumentCollection。虽然两者都不理想,但这似乎不如简单地将值添加到参数结构中那么简单。@Leigh,那么什么是理想的?@froadie-在这种情况下没有理想的答案,除非参数可以有默认值(我假设没有)。你的第一个选择似乎更干净。不幸的是,在这种情况下没有太多的选项,但是传递单个参数和argumentCollection似乎比简单地修改参数结构IMHO更为粗糙。@Leigh-对参数结构的篡改在我看来更为混乱。至少混合参数,虽然奇怪的是它是允许的,但更清楚地显示了意图是什么(即,我想传递传入的任何参数,加上这两个参数)。但这似乎是主观的:)它缺少了一个返回声明,有了这个修复,我认为这实际上是好的。虽然这不是一条直线,但其意图实际上更为明确。然而,通常不会有5个参数,并且很难测试这种方法。
public numeric function myFunction(var1, var2, var3){
    return super.myFunction(var4=variables.var4, var5=variables.var5, 
                            argumentCollection=arguments);
}