6

更新:根据答案,我最初选择了使用 IsInstanceOf() 的方法,它是为这种需要而设计的。然而,由于某种未知的原因,它被证明是极其低效的。后来在调试应用程序时,我最终只是在要使用的对象上设置了一些属性,而不是 IsInstanceOf,从而使速度提高了几个数量级。

我想做的是在 ColdFusion 中测试一个对象,看看它是什么类型的组件。就像是...

<cfif isValid( "compath.dog", currentObj)>
    ...do something specific with dog objects...
</cfif>

我认为这是可能的,但收到一条错误消息,指出我传递的类型与有效类型列表中的类型不对应...

有效类型参数有:any、array、Boolean、date、numeric、query、string、struct、UUID、GUID、binary、integer、float、eurodate、time、creditcard、email、ssn、telephone、zipcode、url、regex、range 、组件或变量名。

有没有办法在 ColdFusion 中实现这一点?

4

4 回答 4

8

您可以使用 GetMetaData 来查找类型。一些快速代码:

<cfif GetMetaData(currentObj).type eq "compath.dog">
于 2009-05-18T19:56:54.447 回答
7

您也可以使用 IsInstanceOf()。尽管您仍必须使用完整路径,但它也可用于确定继承或识别实现特定接口的组件。

<cfif IsInstanceOf(obj, "compath.Dog")>
   yes. it is a dog component {woof}
<cfelse>
    some other type of component 
</cfif>

<cfif IsInstanceOf(obj, "compath.AnimalInterface")>
     yes. it implements the animal interface
<cfelse>
     no. it must be vegetable or mineral ...
</cfif>
于 2009-05-18T22:53:41.190 回答
3

您可以使用 getmetadata() 函数中的名称或全名。

<cfif GetMetaData(currentObj).name eq "compath.dog">
    ...do something specific with dog objects...
</cfif>

或者

<cfif GetMetaData(currentObj).fullname eq "compath.dog">
    ...do something specific with dog objects...
</cfif>

文档在这里getmetadata()关于 getmetadata() 根据对象类型返回的内容。

于 2009-05-18T21:10:36.857 回答
0

Dan,请随意从 MXUnit 中提取代码,这正是您需要做的。我们在 assertIsTypeOf() 断言中这样做。有关详细信息,请参见此处:http ://code.google.com/p/mxunit/source/browse/mxunit/trunk/framework/MXUnitAssertionExtensions.cfc

您看到 isInstanceOf() 性能下降的原因很可能与在 Application.cfc 中设置 this.customTagPaths 有关。我自己打了这个,最近提交了一个错误。希望它会在 CF10 中得到修复,无论何时。

于 2011-03-30T01:57:25.913 回答