在服务器版本之间替换内置的ColdFusion功能



我有一些功能是内置在CF10,而不是在CF9。

我想使函数可用,如果它没有定义。我认为一个简单的try-catch会做到这一点,但我仍然得到"用户定义函数的名称不能与内置ColdFusion函数相同。"错误

try {
    // override function if it doesn't exist
    function listRemoveDuplicates(inList,delim)
    {
        var listStruct = {};
        var i = 1;
        for(i=1;i<=listlen(inList, delim);i++)
        {
            listStruct[listgetat(inList,i)] = listgetat(inList,i);
        }
        return structkeylist(listStruct);
    }
}
catch(e) {
    // do nothing
} 

是否有if语句或任何其他方法处理此问题?

一种方法是将函数放在单独的文件中,然后只有在版本号正确的情况下才包含该文件。比如:

<cfif ListFirst(server.coldfusion.productVersion) LT 10>
  <cfinclude template="/udfs/CF10functions.cfm">
</cfif>

如果这对你不起作用,没有理由你不能把所有的函数都包装在一个单独的if块中。

if (ListFirst(server.coldfusion.productVersion) LT 10) {
  function listRemoveDuplicates(inList,delim) {
    ...
  }
  function foo(arg) {
    ...
  }
  ...
}

总是有GetFunctionList()


显示ColdFusion中可用的函数列表。


函数结构。

if (NOT structKeyExists(getFunctionList(),"listRemoveDuplicates")) {
    // override function if it doesn't exist
    function listRemoveDuplicates(inList,delim)
    {
        var listStruct = {};
        var i = 1;
        for(i=1;i<=listlen(inList, delim);i++)
        {
            listStruct[listgetat(inList,i)] = listgetat(inList,i);
        }
        return structkeylist(listStruct);
    }
}

最新更新