在ColdFusion中返回“nil”值的替代方法

在ColdFusion中返回“nil”值的替代方法,coldfusion,cfml,Coldfusion,Cfml,我有一个函数,它通过用户的电子邮件在数据库中查找用户,并返回一个包含其ID、电子邮件和哈希密码的结构。但是由于ColdFusion缺少null/nil/none类型,所以我无法确定如果用户不存在,返回什么 我的第一个解决方案是返回false,然后只使用ifuser==false来查看用户是否存在,但如果同时使用==和is,ColdFusion将尝试将有效的用户结构转换为布尔值,并在无法转换时抛出错误 我的第二个解决办法是回来;没有值,但我的支票变成ifisDefinedfoo。在我看来,这看起来

我有一个函数,它通过用户的电子邮件在数据库中查找用户,并返回一个包含其ID、电子邮件和哈希密码的结构。但是由于ColdFusion缺少null/nil/none类型,所以我无法确定如果用户不存在,返回什么

我的第一个解决方案是返回false,然后只使用ifuser==false来查看用户是否存在,但如果同时使用==和is,ColdFusion将尝试将有效的用户结构转换为布尔值,并在无法转换时抛出错误

我的第二个解决办法是回来;没有值,但我的支票变成ifisDefinedfoo。在我看来,这看起来很难看,而且使重构变得有点棘手,因为变量名现在也在字符串中

在ColdFusion中是否有一种干净的返回未找到值的方法?

CF自CF9以来为空,例如:

<cffunction name="getUser">
  <cfargument name="userID">
  <cfquery name="qUser">
    SELECT * FROM users where userID = <cfqueryparam value="#userID#">
  </cfquery>
  <cfif qUser.recordCount>
    <cfreturn {name=qUser.name}>
  </cfif>
</cffunction>

<cfset var user = getUser(1)>
<cfif isNull(user)>
   <!-- user not found -->
<cfelse>
   Welcome #user.name#
</cfif>
退回空白或虚假文件将被罚款


诀窍在于如何处理返回,因为最有可能的情况是执行if-isStructresult返回什么并不重要,只要它不是一个结构

不知道该语言,但您可以抛出UserNotFound异常或返回用户ID为-1的结构。我选择@SeanMcSomething,如果您希望让用户返回,那么抛出一个异常是非常合理的,它允许您很好地构造调用代码。另一个解决方案是返回一个空结构。我不希望抛出一个错误:不要定义返回类型。保持原样。