cffunction:基于第一个参数的第二个参数

时间:2017-10-11 09:55:52

标签: function coldfusion arguments

我有以下代码首先创建一个对象,然后调用一个名为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;。

现在我的问题是如何编写第二个参数基于第一个参数的函数?

这甚至可能吗?

谢谢。

2 个答案:

答案 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()。这是一个更快速的检查,因为它不必查看可能具有匹配内容的每个范围。

另请注意,删除数组更容易。