Coldfusion ValueList()是字符串吗?

Coldfusion ValueList()是字符串吗?,coldfusion,cfml,coldfusion-11,Coldfusion,Cfml,Coldfusion 11,我正在尝试将查询结果转换为数组 this.arLibrary = ValueList(qryLibrary.ID).ListToArray(); 我得到以下错误 详细信息:脚本语句必须以“;”结尾CFML编译器已启动 处理:以开头的脚本语句 第43行第9列的this.arLibrary.cfscript标记 从第21行第2列开始。Known列-1 Known行-1 KnownText第43行消息构造无效。 将此代码片段保存到.arLibrary= 值列表(qryLibrary.ID)。 堆栈

我正在尝试将查询结果转换为数组

this.arLibrary  = ValueList(qryLibrary.ID).ListToArray();
我得到以下错误

详细信息:脚本语句必须以“;”结尾CFML编译器已启动 处理:
  • 以开头的脚本语句 第43行第9列的this.arLibrary.cfscript标记 从第21行第2列开始。
Known列-1 Known行-1
KnownText第43行消息构造无效。
将此代码片段保存到.arLibrary= 值列表(qryLibrary.ID)。 堆栈跟踪

这确实有效

temp    = ValueList(qryLibrary.ID);
this.arMetricLibActive  = temp.ListToArray();

这让我想知道
ValueList()
是否是一个字符串

是的,它是一个字符串。该错误是CFML引擎中的解析问题。同样的语法在Lucee中也适用。像亨利建议的那样归档一个bug

下面是CommandBox REPL中的一个示例

CFSCRIPT-REPL: foo = queryNew('bar')
{
    "COLUMNS":[
        "BAR"
    ],
    "DATA":[

    ]
}
CFSCRIPT-REPL: valueList( foo.bar ).listToArray()
[

]

是的,是一根绳子。该错误是CFML引擎中的解析问题。同样的语法在Lucee中也适用。像亨利建议的那样归档一个bug

下面是CommandBox REPL中的一个示例

CFSCRIPT-REPL: foo = queryNew('bar')
{
    "COLUMNS":[
        "BAR"
    ],
    "DATA":[

    ]
}
CFSCRIPT-REPL: valueList( foo.bar ).listToArray()
[

]

James,当错误信息呈现给你时,如果你阅读它们会很有用:它们通常包含相关信息。我的意思并不是说这是一种“明摆着”的方式,而是说这实际上是解决问题的一个非常重要的部分。您将面临来自编译器的错误消息,这意味着错误发生在编译源代码时。然而,您要问一个关于数据类型的问题,在一种松散的动态类型语言(如CFML)中,这是一个运行时考虑的问题。“运行时”意味着“代码运行时”,这本质上是在编译代码之后。如果代码无法编译:它将不会运行

因此问题不在于
valueList()
是否返回字符串或类似的内容

这里的问题是ColdFusion的CFML解析器中有一个bug,它无法解释这个表达式:

ValueList(qryLibrary.ID).ListToArray()
我不知道为什么会有这样的问题:解析对另一个函数调用的返回值的方法调用应该没有问题;事实上,像这样使用
valueList()
似乎是一个独特之处,而不是一般的内置函数

提交一个bug


至于在此期间在代码中如何处理它,我认为Dan是正确的:通常可以使用查询列作为数组,只要使用括号表示法引用该列,例如:
qryLibrary[“ID”]
。Brad提醒大家注意这不是Lucee的工作但是。。。这既不存在也不存在,只是Lucee需要处理的事情。Railo对此提出了一个错误,但他们拒绝解决,只是提出了半有效的理由。

James,如果您在收到错误消息时阅读它们,这会很有用:它们通常包含相关信息。我的意思并不是说这是一种“明摆着”的方式,而是说这实际上是解决问题的一个非常重要的部分。您将面临来自编译器的错误消息,这意味着错误发生在编译源代码时。然而,您要问一个关于数据类型的问题,在一种松散的动态类型语言(如CFML)中,这是一个运行时考虑的问题。“运行时”意味着“代码运行时”,这本质上是在编译代码之后。如果代码无法编译:它将不会运行

因此问题不在于
valueList()
是否返回字符串或类似的内容

这里的问题是ColdFusion的CFML解析器中有一个bug,它无法解释这个表达式:

ValueList(qryLibrary.ID).ListToArray()
我不知道为什么会有这样的问题:解析对另一个函数调用的返回值的方法调用应该没有问题;事实上,像这样使用
valueList()
似乎是一个独特之处,而不是一般的内置函数

提交一个bug


至于在此期间在代码中如何处理它,我认为Dan是正确的:通常可以使用查询列作为数组,只要使用括号表示法引用该列,例如:
qryLibrary[“ID”]
。Brad提醒大家注意这不是Lucee的工作但是。。。这既不存在也不存在,只是Lucee需要处理的事情。Railo对此提出了一个bug,但他们拒绝解决,只是提出了半有效的理由。

结束语:

这适用于ColdFusion 2016及更高版本

<cfscript>
qryLibrary = QueryNew("ID", "varchar");

qryLibrary.addrow({"id" : "cat"});
qryLibrary.addrow({"id" : "dog"});
qryLibrary.addrow({"id" : "fish"});

writedump(qryLibrary);

arLibrary  = ValueList(qryLibrary.ID).ListToArray();

writedump(arLibrary);
</cfscript>

qryLibrary=QueryNew(“ID”,“varchar”);
qryLibrary.addrow({“id”:“cat”});
addrow({“id”:“dog”});
addrow({“id”:“fish”});
书面文件(qryLibrary);
arLibrary=ValueList(qryLibrary.ID).ListToArray();
书面文件(图书馆);

结束语:

这适用于ColdFusion 2016及更高版本

<cfscript>
qryLibrary = QueryNew("ID", "varchar");

qryLibrary.addrow({"id" : "cat"});
qryLibrary.addrow({"id" : "dog"});
qryLibrary.addrow({"id" : "fish"});

writedump(qryLibrary);

arLibrary  = ValueList(qryLibrary.ID).ListToArray();

writedump(arLibrary);
</cfscript>

qryLibrary=QueryNew(“ID”,“varchar”);
qryLibrary.addrow({“id”:“cat”});
addrow({“id”:“dog”});
addrow({“id”:“fish”});
书面文件(qryLibrary);
arLibrary=ValueList(qryLibrary.ID).ListToArray();
书面文件(图书馆);

是否将此文件归档到“语言”下?然而,我有一种感觉,它会落在“不会修复”下。考虑到数组函数在查询列上工作,您可能希望做一些不必要的事情。ValueList()是字符串吗<代码>写操作(temp.getClass().name)@dan baruk,不是在Lucee他们没有。这是一种仅在Adobe CF中存在的未记录行为。Lucee有一个专用函数,用于以数组形式检索查询的列数据。@Leigh:它返回:
java.lang.String
。类似的注释是
ValueList(qryLibrary.ID).getClass()将此文件崩溃到“语言”下?然而,我有一种感觉,它会落在“不会修复”下。考虑到数组函数在查询列上工作,您可能希望做一些不必要的事情。ValueList()是字符串吗<代码>写操作(temp.getClass().name)
@dan baruk,不是在Lucee他们没有。这是一种仅存在的未记录行为