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() 関数から name または fullname を使用できます。

<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

ダン、必要なことを正確に実行する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 に答える