ColdFusion 11中的自动类型转换

乔·德罗斯

我正在将应用程序从ColdFusion 9迁移到ColdFusion 11。

在现有代码中,有一个变量分配给false

<cfset VARIABLES.roleTypeId = false >

然后,更进一步的是,一个希望该变量为数字的函数:

<cffunction name="rolesForStudy" >
    <cfargument name="id" hint="Study Id">
    <cfargument name="roleTypeId" default="#VARIABLES.roleTypeId#" type="numeric"/>
</cffunction>

我继承的代码,我不能保卫原来的程序员的决定,这样一来设置它-但,总之,它在ColdFusion的9,它不工作中的ColdFusion 11(返回数据类型错误)。我认为ColdFusion 9已自动转换false0

我的问题:是否可以在ColdFusion 11中进行更改以使其像ColdFusion 9那样进行转换的配置设置?还是我必须修复此代码,以及整个应用程序中可能还有许多其他类似的示例?我和我们的ColdFusion管理员都无法在ColdFusion管理员界面,ColdFusion文档或在线中找到有关此信息的任何信息。

编辑以回应亚当·卡梅伦的评论

我创建了一个由以下10行组成的文件(仅此而已):

<cfset VARIABLES.roleTypeId = false >
<cfoutput>
<p>#rolesForStudy( 1, VARIABLES.roleTypeId )#</p>
</cfoutput>

<cffunction name="rolesForStudy" >
    <cfargument name="id" hint="Study Id">
    <cfargument name="roleTypeId" default="#VARIABLES.roleTypeId#" type="numeric"/>
    <cfreturn "It worked" >
</cffunction>

当我在ColdFusion 9中执行它时,它会显示单词“ It work work”。

当我在ColdFusion 11中执行它时,它返回以下错误消息:
如果将组件名称指定为此参数的类型,则可能找不到或无法访问该组件的定义文件。

马克·克鲁格

我相信您将必须修复该代码。没有任何设置(我至少知道)可以更改CF处理布尔类型的方式。您应该可以将上面的分配从“ false”更改为0,并且您的功能代码将起作用。但是我怀疑在其他地方,您可能会有类似的东西<cfif variables.roletypeID IS "False">会被破坏,因为它实际上是在寻找字符串-它也可以工作(ha)。CF将无数的布尔值(0或非0,true,false,yes和no)进行处理是其起源。有时很方便,但肯定会导致这样的事情。

同时,我想知道这种行为变化是新错误还是旧错误的修复。在我看来,将“ false”作为参数传递并将其读取为数值似乎不一致,因此对我而言,新的处理方式似乎正确。但是,许多语言将0和0视为true和false的默认值。

编辑:

根据亚当在下面的评论,我的代码示例中有人会说:

<cfif somevar IS "false">

...即使somevar确实是数字也可以工作。他的例子(有用)是:

#0 is "False"#

...将输出“ yes”-因此CF正在幕后将字符串“ false”重铸为零以进行比较。这使我的例子不正确。

我相信我的答案仍然是正确的。他遇到的问题是传递给他的函数的参数-类型为“布尔”的参数引发错误,因为该函数需要一个数值。但是亚当的观点和例子使我认为这种行为可能是一个错误-因为看起来CF在检查类型之前没有将其强制转换为数字(乔在CF 9中确实这样做了)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章