gpt4 book ai didi

coldfusion - ColdFusion 11 中的自动类型转换

转载 作者:行者123 更新时间:2023-12-03 13:08:43 25 4
gpt4 key购买 nike

我正在将应用程序从 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 中执行它时,它会显示“它有效”字样。

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

最佳答案

我相信你将不得不修复代码。没有任何设置(无论如何我都知道)可以改变 CF 处理 bool 类型的方式。您应该能够将上面的赋值从“false”更改为 0,并且您的功能代码将起作用。但是我怀疑在其他地方你可能有类似 <cfif variables.roletypeID IS "False"> 的东西然后它会被打破,因为它实际上是在寻找一个字符串 - 这也有效(ha)。 CF 将无数值作为 bool 值(0 或非 0、真、假、是和否)处理是它起源的遗产。这有时很方便,但肯定会导致这样的事情。

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

编辑:

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

<cfif somevar IS "false">

...即使 somevar 确实是数字也会起作用。他的例子(有用)是:
#0 is "False"#

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

我相信我的答案仍然是正确的。他遇到的问题是传递给他的函数的参数 - 类型为“boolean”的参数抛出错误,因为该函数需要一个数值。但是亚当的观点和例子让我认为这种行为可能是一个错误 - 因为看起来 CF 在检查类型之前没有转换为数字(根据 Joe 的说法,它在 CF 9 中确实这样做了)。

关于coldfusion - ColdFusion 11 中的自动类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com