【问题标题】:Complex object types cannot be converted to simple values复杂对象类型不能转换为简单值
【发布时间】:2014-02-06 14:42:13
【问题描述】:

使用:CF10

我将结构的键值存储在变量中:

<cfset ApplicationArea = '1'>

我想看看这个值是否存在于这样的结构中:

StructKeyExists(SESSION.Auth.AccessA, #ApplicationArea#)

这一切都有效。但是,SESSION.Auth.AccessA["1"] 的结构中还有更多的键。我现在需要查找此结构中是否存在某个键。这是我想出但不起作用的方法:

StructFindValue(SESSION.Auth.AccessA[#ApplicationArea#], '3') GT 0

我收到“复杂对象类型无法转换为简单值。”的错误

我想知道'3' 的值是否存在于SESSION.Auth.AccessA["1"] 的结构中(当我转储SESSION 变量时它会这样做)。我的解释可能有点混乱,但我认为它是正确的。

【问题讨论】:

    标签: coldfusion coldfusion-10


    【解决方案1】:
    <cfscript>
    if (ArrayLen(StructFindValue(SESSION.Auth.AccessA[ApplicationArea], '3', 'ALL'))) {
        // it exists
    } else {
        // it does not
    }
    </cfscript>
    

    编辑:非cfscript请求

    <cfif ArrayLen(StructFindValue(SESSION.Auth.AccessA[ApplicationArea], '3', 'ALL'))>
        <!--- it exists --->
    <cfelse>
        <!--- it does not --->
    </cfif>
    

    StructFindValue 返回一个结构数组,其中包含有关与值匹配的键的信息。

    https://wikidocs.adobe.com/wiki/display/coldfusionen/StructFindValue

    您的问题中不需要任何 # 字符(我知道您询问了最近何时以及何时不使用它们)

    【讨论】:

    • 不使用 可以翻译吗?
    • 老兄,这是一个 if 语句。我认为这很简单。
    • 一切就绪,但说真的,寻求帮助是一回事,让别人为你编写代码不是本网站的重点。下次尝试阅读您首先使用的功能的文档。它清楚地表明它返回一个数组。因此“复杂对象无法转换为简单值”错误。正如您在问题中显示的那样,数组永远不能与零进行比较。
    • 在旁注中,我很困惑为什么它不需要数字符号。因为我要求它评估 ApplicationArea 并用正确的值替换它。它怎么知道我没有要求它查看名为 'ApplicationArea' 的结构键?
    • 如果您在字符串中使用它,通常只需要#。所以如果你在做 struct["#varname#"] 那么是的,你需要它们,但你可以只做 struct[varname]。有时您必须使用引号,例如标记参数&lt;cfquery name="q" datasource="#application.dsn#"&gt;,在这种情况下,您在字符串中,因此如果您没有#,那么它将尝试使用名为“应用程序”的DSN .dsn" 当你真的想要这个值时。昨天你的问题都清楚地回答了。我建议您花时间阅读回复以及建议的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    相关资源
    最近更新 更多