ValueList() 是一个字符串吗?
Is a ValueList() a string?
我正在尝试将查询结果转换为数组
this.arLibrary = ValueList(qryLibrary.ID).ListToArray();
我收到以下错误
Detail A script statement must end with ";".
The CFML compiler was
processing:
- A script statement beginning with
this.arLibrary on line 43, column 9.
- A cfscript tag
beginning on line 21, column 2.
KnownColumn -1 KnownLine -1
KnownText <unknown> Line 43 Message Invalid construct.
Snippet this.arLibrary =
ValueList(qryLibrary.ID).
StackTrace
这确实有效
temp = ValueList(qryLibrary.ID);
this.arMetricLibActive = temp.ListToArray();
这让我想知道 ValueList()
是否是一个字符串
是的,这是一个字符串。该错误是 CFML 引擎中的解析问题。同样的语法在 Lucee 中运行良好。像 Henry 建议的那样提交错误。
这是 CommandBox REPL 中的示例
CFSCRIPT-REPL: foo = queryNew('bar')
{
"COLUMNS":[
"BAR"
],
"DATA":[
]
}
CFSCRIPT-REPL: valueList( foo.bar ).listToArray()
[
]
James,如果您在收到错误消息时阅读它们会很有用:它们通常包含相关信息。我的意思不是 "stating the obvious" 那种方式,而是它实际上是解决问题的一个非常重要的部分。您面临来自 compiler 的错误消息,这意味着在编译源代码时发生了错误。但是,您问的是有关数据类型的问题,在像 CFML 这样的松散动态类型语言中,这是一个 运行 时间考虑因素。 "Runtime" 意味着 "when the code is being run" 本质上是在代码编译之后。如果代码无法编译:它不会是 运行.
所以问题不在于 valueList()
return 是字符串还是类似的东西。
这里的问题是 ColdFusion 的 CFML 解析器有一个错误,它无法解释这个表达式:
ValueList(qryLibrary.ID).ListToArray()
我不知道为什么这个有问题:在另一个函数调用的return值上解析一个方法的调用应该没有问题;实际上,与一般的内置函数相反,使用 valueList()
似乎是一个特点。
提交错误。
至于在此期间在您的代码中如何处理它,我认为 Dan 是对的:通常无论如何都可以将查询列用作数组,前提是使用方括号表示法来引用该列,例如:qryLibrary["ID"]
。 Brad 提请注意这对 Lucee 不起作用,但是......这既不存在也不存在,只是 Lucee 需要处理的事情。 Railo 中为此提出了一个错误 - https://issues.jboss.org/browse/RAILO-641 - 但他们拒绝解决它,只有半有效的推理。
结语:
这适用于 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>
我正在尝试将查询结果转换为数组
this.arLibrary = ValueList(qryLibrary.ID).ListToArray();
我收到以下错误
Detail A script statement must end with ";".
The CFML compiler was processing:
KnownColumn -1 KnownLine -1
- A script statement beginning with this.arLibrary on line 43, column 9.
- A cfscript tag beginning on line 21, column 2.
KnownText <unknown> Line 43 Message Invalid construct.
Snippet this.arLibrary = ValueList(qryLibrary.ID). StackTrace
这确实有效
temp = ValueList(qryLibrary.ID);
this.arMetricLibActive = temp.ListToArray();
这让我想知道 ValueList()
是否是一个字符串
是的,这是一个字符串。该错误是 CFML 引擎中的解析问题。同样的语法在 Lucee 中运行良好。像 Henry 建议的那样提交错误。
这是 CommandBox REPL 中的示例
CFSCRIPT-REPL: foo = queryNew('bar')
{
"COLUMNS":[
"BAR"
],
"DATA":[
]
}
CFSCRIPT-REPL: valueList( foo.bar ).listToArray()
[
]
James,如果您在收到错误消息时阅读它们会很有用:它们通常包含相关信息。我的意思不是 "stating the obvious" 那种方式,而是它实际上是解决问题的一个非常重要的部分。您面临来自 compiler 的错误消息,这意味着在编译源代码时发生了错误。但是,您问的是有关数据类型的问题,在像 CFML 这样的松散动态类型语言中,这是一个 运行 时间考虑因素。 "Runtime" 意味着 "when the code is being run" 本质上是在代码编译之后。如果代码无法编译:它不会是 运行.
所以问题不在于 valueList()
return 是字符串还是类似的东西。
这里的问题是 ColdFusion 的 CFML 解析器有一个错误,它无法解释这个表达式:
ValueList(qryLibrary.ID).ListToArray()
我不知道为什么这个有问题:在另一个函数调用的return值上解析一个方法的调用应该没有问题;实际上,与一般的内置函数相反,使用 valueList()
似乎是一个特点。
提交错误。
至于在此期间在您的代码中如何处理它,我认为 Dan 是对的:通常无论如何都可以将查询列用作数组,前提是使用方括号表示法来引用该列,例如:qryLibrary["ID"]
。 Brad 提请注意这对 Lucee 不起作用,但是......这既不存在也不存在,只是 Lucee 需要处理的事情。 Railo 中为此提出了一个错误 - https://issues.jboss.org/browse/RAILO-641 - 但他们拒绝解决它,只有半有效的推理。
结语:
这适用于 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>