背景
当我试图将可选参数传递给另一个函数时,我遇到了一个问题。被调用的函数也有可选的参数,所以我试着获得这个选项,以便一直传播下去。
我正在经历的问题是,由于冷融合没有空(或者至少不是真的)的概念,当一个可选的参数被省略时,它实际上并不存在。
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使用不同的参数名称,则不起作用发布于 2022-09-30 14:02:08
这个问题很古老,但最正确的答案不在这里,这是很疯狂的。是的,您可以在集合范围上使用structKeyExists,但也可以只使用isDefined('argumentname'),这是自CF3以来一直使用的选项。
从docs:计算字符串值,以确定其中命名的变量是否存在。这个函数是对ParameterExists函数的替代,后者被废弃。
https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-in-k/isdefined.html
https://stackoverflow.com/questions/28322426
复制相似问题