gpt4 book ai didi

coldfusion - 组件上 accessors=true 的意外行为

转载 作者:行者123 更新时间:2023-12-04 02:04:56 26 4
gpt4 key购买 nike

我试图在 Lucee 上的组件上使用合成访问器(尽管这个问题在 ColdFusion 上似乎也一样)。

复制代码:

// Person.cfc
component accessors=true {

property firstName;
property lastName;

function init(firstName, lastName){
variables.firstName = arguments.firstName;
variables.lastName = arguments.lastName;
}

}

和调用代码:
// person.cfm
person = new Person("Abigail", "Bowen");
writeDump(person);

请注意我在这里没有使用合成访问器,我只是将参数值设置为同名变量范围的变量。

但是,当我运行此代码时,我看到:

Dump output showing properties

请注意属性是如何填充的。这没有问题,但我显然不明白 accessors flag 应该可以工作。我认为它只是为了为我合成一些访问器方法(它有),但仅此而已。

另请注意,如果我修改 CFC 定义以不将访问器设置为 true,则转储会显示以下内容:

Dump with no properties

所以没有合成访问器(正如预期的那样),而且现在甚至没有显示属性(无论是否带有变量范围的值)。

我真的不明白“属性”和访问器设置的这种混淆?当然访问器设置应该只影响这些访问器方法是否被创建?

如果我只在其中一个平台上看到这个,我可能会把它归结为 writeDump()解释属性定义。但是在 ColdFusion 11 上的行为是相同的,所以看起来确实有一些我不太明白的行为差异。

谁能解释一下?有没有解释它的文档?如果不是……嗯……为什么不呢?

我的潜在担忧是属性值没有“正确”存储,一旦我实现更多代码,可能会给我带来问题。

更新:
至少在ColdFusion 上,它似乎只是 writeDump() 的变化的行为,因为如果属性有 getter(无论是否设置了 accessors 标志),那么属性值就会开始显示在转储中。然而,Lucee 的情况并非如此,所以那里仍然存在一个问号。

为了全面公开,这个问题是我在我的博客(“ CFML: trying to understand accessors”)上也问过的一个问题的总结。重复是故意的,因为我的博客与本网站的受众不同。

最佳答案

accessors=true , property声明只是元数据。

accessors=true , property声明会触发 getter/setter 的生成,从而触发 property都是 variables范围项目 一对方法。

在您的构造函数中,您分配给 variables范围项——这与使用生成的 setter 相同——并且当 CFML 转储组件时,它会看到 property元数据和生成的 getter,因此它显示这些属性具有的值(因为它可以轻松安全地调用生成的 getter)。

关于coldfusion - 组件上 accessors=true 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com