ValueList()是一个字符串吗?

时间:2015-09-02 20:31:21

标签: coldfusion cfml coldfusion-11

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

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

我收到以下错误

  

详细信息脚本语句必须以“;”结尾。

CFML编译器是   处理:

  • 以。开头的脚本语句   this.arLibrary在第43行,第9栏。
  • 一个cfscript标签   从第21行第2列开始。
KnownColumn -1 KnownLine -1
  KnownText< unknown>第43行消息无效构造。
  Snippet this.arLibrary =   值列表(qryLibrary.ID)。   栈跟踪

这确实有效

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

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

3 个答案:

答案 0 :(得分:3)

是的,这是一个字符串。该错误是CFML引擎中的解析问题。相同的语法在Lucee中工作正常。提交像Henry建议的错误。

这是CommandBox REPL

中的一个示例
CFSCRIPT-REPL: foo = queryNew('bar')
{
    "COLUMNS":[
        "BAR"
    ],
    "DATA":[

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

]

答案 1 :(得分:2)

詹姆斯,如果您在向他们展示时阅读错误消息,它会很有用:它们通常包含相关信息。我不是故意在说明明显的#34;某种方式,但它实际上是解决问题的一个非常重要的部分。您遇到来自编译器的错误消息,这意味着在编译源代码时发生错误。但是,您要问的是有关数据类型的问题,这是一种松散且动态类型的语言,如CFML,是运行时考虑因素。 "运行"暗示"当代码运行时#34;在编译代码之后本质上是这样的。如果代码无法编译:它将无法运行。

所以问题不在于valueList()是否返回字符串或类似的东西。

这里的问题是ColdFusion的CFML解析器中存在一个错误,它无法解释这个表达式:

ValueList(qryLibrary.ID).ListToArray()

我不知道为什么存在这样的问题:解析在另一个函数调用的返回值上调用方法应该没有问题;事实上,使用像这样的valueList()似乎是一种特殊的做法,而不是一般的内置函数。

提交错误。

至于在你的代码中如何处理它,我认为Dan是对的:通常可以使用查询列作为数组,只要使用括号表示法引用列,例如:{{1 }}。布拉德提请注意这不是在为Lucee工作,但......这既不在这里,也不在那里,只是Lucee需要处理的事情。在Railo中出现了一个错误 - https://issues.jboss.org/browse/RAILO-641 - 但他们拒绝解决这个问题,只有半有效的推理。

答案 2 :(得分:1)

附言:

这适用于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>

https://cffiddle.org/app/file?filepath=6588296c-5e4d-49a4-894b-4986513e9e30/0ecde857-6d28-4e43-88a7-7830c109ab11/84cd7e81-16f8-43d7-b4c9-5490b1b5d007.cfm