Coldfusion字符串::split()问题

3

我有以下代码

<cffunction name="getObjTag" returnType="string" output="false">
    <cfargument name="obj" Type="string" required="true">
    <cfargument name="tagname" Type="string" required="true">
    <cfreturn obj.split("<" & tagname.toUpperCase() & ">")[2]>
</cffunction>

这导致以下错误。
Invalid CFML construct found on line 96 at column 63.

ColdFusion was looking at the following text:

[

The CFML compiler was processing:

A cfreturn tag beginning on line 96, column 10.
A cfreturn tag beginning on line 96, column 10.

为什么会出现这种情况?这是在编译时发生的,而不是运行时。
2个回答

3

CF 9新增了直接从函数调用中访问拆分结果的数组的功能。以下内容在我本地安装的9.0.1上正常工作:

<cfset foo = "this is a string" />
<cfdump var="#foo.split(" ")[1]#" />

转储显示此示例中的'this'。

1
你能否提供一些关于split()函数的文档链接?我很难找到相关资料。谢谢... - cfEngineers
cfEngineers - 这是一个Java方法:http://download.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String) - Mark

2

CF无法直接从函数调用中访问拆分结果作为数组。您需要一个中间变量。

<cfset var tmpArray = arrayNew(1)/>
<cfset tmpArray = arguments.obj.split("<" & arguments.tagname.toUpperCase() & ">")/>
<cfif arrayLen(tmpArray) gt 1>
   <cfreturn tmpArray[2]/>
<cfelse>
   <cfreturn ""/>
</cfif>

你还需要注意你的索引。尽管Java数组的底层是以0为索引起始值,但使用ColdFusion访问它会使其从1开始索引。


不错的答案,但也看看我的。CF9 可以处理这个。 - Todd Sharp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接