背景
我在尝试将可选参数传递给另一个函数时遇到了问题。被调用的函数也有可选参数,所以我试图让这种可选性一直传递下去。
我遇到的问题是,由于ColdFusion没有空(null)的概念(或者至少不真正存在),当省略可选参数时,它实际上不存在。
component accessors=true output=false persistent=false {
public void function foo(String otherOptional, String optional1,String optional2 ){
//Other code
//Other code
//Other code
bar(optional1=optional1,optional2=optional2);
}
public void function bar(String optional1, String optional2 ){
//Other code
}
}
例如,在上面的代码中,如果没有任何参数调用
foo
,我会收到一个错误。Variable OPTIONAL1 is undefined.
The error occurred in D:/web/experimental/OptionalTest.cfc: line 11
9 :
10 : //Other code
11 : bar(optional1=optional1,optional2=optional2);
12 :
13 : }
问题
有没有一种方法可以将可选参数传递给另一个函数,而这些参数在该函数中也是可选的,而不会导致错误?
我考虑过的解决方案有:
- 传递
argumentcollection=arguments
。但这似乎非常不愉快,因为它使得很难读懂哪些参数真正需要被bar使用(我尝试过调试这样的代码,那不是什么好玩的事情)。此外,如果foo
和bar
使用不同的参数名称,则无法使用此方法。 - 一系列的if StructKeyExists语句,只有在存在可选参数时才传递。这个方法可以工作,但可能会变得非常复杂。