在ColdFusion组件中传递参数

在ColdFusion组件中传递参数,coldfusion,Coldfusion,我需要帮助确定Coldfusion StructKeyExists函数。根据版本的不同,我会得到不同的结果。例如: 我把这一论点当作一个例子 <cfif StructKeyExists(arguments,'userid') and arguments.userid neq ''> 它工作正常 现在如果我有这样的论点: <cfif isDefined('arguments.structform.user') and arguments.structform.user ne

我需要帮助确定Coldfusion StructKeyExists函数。根据版本的不同,我会得到不同的结果。例如:

我把这一论点当作一个例子

<cfif StructKeyExists(arguments,'userid') and arguments.userid neq ''>

它工作正常

现在如果我有这样的论点:

<cfif isDefined('arguments.structform.user') and arguments.structform.user neq ''> 

它工作正常

如果我通过以上考试:

<cfif StructKeyExists(arguments,'structform.user') and arguments.structform.user neq ''> 

  • Coldfusion无法识别它并完全跳过它

使用coldfusion 10不是递归的,它只能在当前结构上查找键。在您的例子中,您需要测试
参数
是否有
structform
键,然后另外检查
参数。structform
是否有
用户

<cfif StructKeyExists(arguments,'structform') and StructKeyExists(arguments.structform,'user') and arguments.structform.user neq ''>
即使您只使用空结构定义了
structForm
参数,它仍然比您最初所做的要好

<cfargument name="structform" type="struct" default="#{}#">
<cfif structKeyExists(arguments.structform, "user") and arguments.structform.user neq ''>

structKeyExists
不是递归的,它只能在当前结构上查找键。在您的例子中,您需要测试
参数
是否有
structform
键,然后另外检查
参数。structform
是否有
用户

<cfif StructKeyExists(arguments,'structform') and StructKeyExists(arguments.structform,'user') and arguments.structform.user neq ''>
即使您只使用空结构定义了
structForm
参数,它仍然比您最初所做的要好

<cfargument name="structform" type="struct" default="#{}#">
<cfif structKeyExists(arguments.structform, "user") and arguments.structform.user neq ''>


参数
没有
structform.user
键。它有一个
structform
键。在你的代码示例中,没有一个是你真正“传递”了一个参数,你只是试图检查参数的存在——或者更准确地说,您正在尝试检查某个参数中是否存在结构键。实际问题是什么?
参数
没有
structform.user
键。它有一个
structform
键。在你的代码示例中,没有一个是真的“传递”一个参数,你只是在尝试检查参数的存在——更准确地说,你是在尝试检查一个参数中是否存在结构键。实际的问题是什么?那么使用上面提到的,它是否会对我不知道的
isDefined
函数进行一些性能改进。测试它并找出答案!我使用Railo,所以我测试它可能不会得到与您相同的结果。我猜您会发现,您必须迭代数十万次才能获得任何类型的可测量数据,这意味着差异可以忽略不计。差异不在于性能,而在于使用一种方法与另一种方法时会发生什么。使用
isDefined()
可能会在找到
arguments.structform.user
(如果存在)之前找到
local.arguments.structform.user
。其中as
structKeyExists
将只查看
参数
作用域。因此,使用上面提到的方法,它将对我不知道的
isDefined
函数有一些性能改进。测试它并找出答案!我使用Railo,所以我测试它可能不会得到与您相同的结果。我猜您会发现,您必须迭代数十万次才能获得任何类型的可测量数据,这意味着差异可以忽略不计。差异不在于性能,而在于使用一种方法与另一种方法时会发生什么。使用
isDefined()
可能会在找到
arguments.structform.user
(如果存在)之前找到
local.arguments.structform.user
。其中as
structKeyExists
将只查看
参数
范围。