可以在cffunction中使用ListFilter

时间:2017-08-23 20:30:43

标签: coldfusion closures

我有一个列表,想要删除函数中的一些元素。我将要删除的元素作为结构传递给该函数。我以为我可以使用函数ListFilter遍历列表。由于我将一个函数作为参数传递给了这个函数,我现在想知道是否可以从闭包中访问Arguments cffunction范围。这个闭包可以访问任何“外部”变量吗?这些必须在什么范围内存在?

<cffunction name="funcA" returntype="string">
    <cfargument name="struExcludeCols" type="struct">

    <cfset local.strLst = "Listel1,Listel2,Listel3">

    <cfscript>
        local.columnNames = ListFilter( 
            strLst, 
            function( strCol ) {             
                return not StructKeyExists( Arguments.struExcludeCols, strCol );       
            } 
        );
    </cfscript>

    <cfreturn local.columnNames>
</cffunction>


<cfdump var="#funcA( { "Listel2" = 1 } )#">

1 个答案:

答案 0 :(得分:2)

ListFilter内的内联函数无权访问Arguments funcA范围。它可以访问this

工作代码:

<cffunction name="funcA" returntype="string">
    <cfargument name="struExcludeCols" type="struct">

    <cfset local.strLst = "Listel1,Listel2,Listel3">
    <cfset this.struExcludeCols = Arguments.struExcludeCols>

    <cfscript>
        local.columnNames = ListFilter( 
            strLst, 
            function( strCol ) {             
                return not StructKeyExists( this.struExcludeCols, strCol );       
            } 
        );
    </cfscript>

    <cfreturn local.columnNames>
</cffunction>


<cfdump var="#funcA( { "Listel2" = 1 } )#">