ColdFusion中动态变量访问的混乱

ColdFusion中动态变量访问的混乱,coldfusion,coldfusion-9,Coldfusion,Coldfusion 9,下面是我正在使用的代码块 <cfset variables.test1 = 'interface.temp1'> <cfset variables.test2 = 'interface.temp2'> <cfset variables.test3 = 'variables.' & variables.test2> <cfset variables["#variables.test1#"] = 23> <cfset "#variable

下面是我正在使用的代码块

<cfset variables.test1 = 'interface.temp1'>
<cfset variables.test2 = 'interface.temp2'>
<cfset variables.test3 = 'variables.' & variables.test2>
<cfset variables["#variables.test1#"] = 23>
<cfset "#variables.test3#" = 50>

<cfdump var="#variables#">
<cfdump var="#variables['interface.temp1']#">

附件中的图像描述了我得到的输出。 第一个cfdump将“interface.temp1”值显示为“undefined”,第二个cfdump将该值显示为“23”。如果您还查看第一个cfdump,它显示变量范围中的所有变量,但没有值为“23”的变量,那么在第二个cfdump中,它从何处获得值为“23”

请帮助我了解这背后的原因


我已经破解了它。我把它全部写在我的博客上

基本上,一旦你有了一个叫做
接口
的子结构,正如@Leigh所说的,它是由以下内容创建的:

<cfset "#variables.test3#" = 50>

然后ColdFusion(and,fwiw,Railo)在尝试解析以
接口为前缀的结构键时会感到困惑。
:它将这些引用视为对
接口
子结构中键的引用,而不仅仅是键名


如果您没有上面的代码行,那么CF可以很好地看到名为value的虚线键。

您在上面发布的输出不是我在CF9上运行该代码时得到的输出。这一切对我来说都是意料之中的(在cflive.net上试用)你运行的是什么版本的CF?@Michael Giovanni Pumo,我正在使用CF9@AdamCameron,我还检查了这是cflive.net,发现输出不同,但在我的本地机器中,我得到了我发布的输出。这背后可能是什么原因呢?在我的CF9实例上运行此操作会给出与问题相同的结果。与cflive版本相同:/啊,你说得对。这是一个有趣的问题。每当变量名偏离直线和窄线(字母/数字/下划线)时,我通常使用数组表示法,因此我没有遇到过这种情况。老实说,我不确定表达式
st.prefix.key2
是否有效。允许这种语法会产生歧义,因为几乎不可能区分名为
prefix.key2
的简单键和名为
prefix
的结构,其中包含
key2
。ie
st['prefix.key2']和st={prefix={key2=“aaa”}}