我有以下代码首先创建一个对象,然后调用一个名为init的函数。
<cfset SESSION.objWatchlist = createObject("component", "path") />
<cfset SESSION.objWatchlist.init(session.addressid) />
到目前为止一切顺利。 init函数如下所示:
<cffunction name="init" access="remote" output="false">
<cfargument name="addressID" type="numeric" required="true" />
<cfset THIS.ADDRESSID = arguments.addressID />
<cfset THIS.WATCHLIST = arrayNew(1) />
<cfset initWatchlistArray() />
<cfreturn this />
</cffunction>
现在我想在cffunction中添加另一个参数。我会这样称呼:
<cfset SESSION.objWatchlist.init("addressid", session.addressid) />
和
<cfset SESSION.objWatchlist.init("sessionid", session.sessionid) />
我在cffunction中添加了一些新行:
<cffunction name="init" access="remote" output="false">
<cfargument name="typeOfID" type="string" required="true" />
<cfif arguments.typeOfID eq "addressid">
<cfargument name="addressID" type="numeric" required="true" />
<cfset THIS.ADDRESSID = arguments.addressID />
<cfelseif arguments.typeOfID eq "sessionid">
<cfargument name="sessionID" type="string" required="true" />
<cfset THIS.SESSIONID = arguments.sessionID />
</cfif>
<cfset THIS.WATCHLIST = arrayNew(1) />
<cfset initWatchlistArray() />
<cfreturn this />
</cffunction>
但每次我收到错误&#34;标签必须嵌套在CFFUNCTION标签内#34;。
现在我的问题是如何编写第二个参数基于第一个参数的函数?
这甚至可能吗?
谢谢。
答案 0 :(得分:0)
最后,我找到了一个看起来像这样的解决方案:
首先我调用函数:
<cfset SESSION.objWatchlist.init(addressID=session.addressid) />
<cfset SESSION.objWatchlist.init(sessionID=session.sessionid) />
我将功能更改为以下内容:
<cffunction name="init" access="remote" output="false">
<cfargument name="addressID" type="numeric" required="false" />
<cfargument name="sessionID" type="string" required="false" />
<cfif isDefined("arguments.addressid")>
<cfset THIS.ADDRESSID = arguments.addressID />
<cfelseif isDefined("arguments.sessionid")>
<cfset THIS.SESSIONID = arguments.sessionid />
</cfif>
<cfset THIS.WATCHLIST = arrayNew(1) />
<cfset initWatchlistArray() />
<cfreturn this />
</cffunction>
当调用函数时,我可以用cffunction中的参数名称来调用它们。 之后我可以检查哪一个被定义。
答案 1 :(得分:0)
这对于评论来说太长了,但我对此有一点清理
SESSION.objWatchlist.init(addressID=session.addressid);
SESSION.objWatchlist.init(sessionID=session.sessionid);
any function init(numeric addressID, string sessionid) access="remote" output="false" {
if (arguments.keyexists(("addressid")) { THIS.ADDRESSID = arguments.addressID; }
else if (arguments.keyexists("sessionid") { THIS.SESSIONID = arguments.sessionid; }
THIS.WATCHLIST = [];
initWatchlistArray();
return this;
}
注意:使用.keyexists()
。这是一个更快速的检查,因为它不必查看可能具有匹配内容的每个范围。
另请注意,删除数组更容易。