2

2 つの異なるコンポーネントを何らかの形式のデータ構造に追加し、それらをダンプするときに、Coldfusion で奇妙なバグを発見しました。

この質問のために、コードを単純化しました。コンポーネント A とコンポーネント B があり、どちらにも 1 つのプロパティ、1 つのコンストラクター、1 つの関数があります。

A のインスタンスと B のインスタンスを作成します。インスタンスを別々にダンプすると、正しいメタデータが表示されます。

ただし、2 つのインスタンスをデータ構造 (最初のスロットにコンポーネント B、2 番目にコンポーネント A) に追加すると、スロット 1 のインスタンスのメソッドがスロット 2 のインスタンスで複製されているように見えますが、それらは異なるオブジェクトです。 . つまり、CompBFunction、GetCompBProp、SetCompBProp が Comp A のメソッドとしてリストされています。しかし、プロパティは正しいように見えます。

Comp A で Comp B のメソッドを呼び出すことができないことに注意してください。これは表示上の問題のようです。オブジェクト 'a' で CompBFunction を呼び出してみましたが、期待どおりに失敗しました。

ここで何か助けていただければ幸いです。大きな問題ではないことは理解していますが、これらのメソッドが存在しない場合にここに表示されると、誤解を招く可能性があります。私のコードには、混合コンポーネントのデータ構造を構築したい場合がたくさんあります。

この質問が以前に尋ねられた場合はお詫びします - 高低を検索しましたが、それに関する情報は見つかりませんでした。CF9を使用しています。

ここに私のコード例があります:-

コンポーネント A

component name="CompA" output="false" cache="false" accessors="true" {
    property name="CompAprop" type="Numeric" getter="true" setter="true";

    public CompA function init() output="false" {
        return this;
    }

    public String function CompAFunction() output="false" {
    return "All";
    }
}

コンポーネント B

component name="CompB" output="false" cache="false" accessors="true" {
    property name="CompBprop" type="Numeric" getter="true" setter="true";

    public CompB function init() output="false" {
        return this;
    }

    public String function CompBFunction() output="false" {
    return "All";
    }
}

索引.cfm

<cfset a = new CompA() />
<cfset b = new CompB() />

<cfset test = ArrayNew(1) />
<cfset test[1] = b />
<cfset test[2] = a />

<cfdump var="#test#" /> <!--- METHODS FOR B APPEAR IN METADATA FOR A --->
<cfdump var="#test[1]#" /> <!--- METADATA CORRECT --->
<cfdump var="#test[2]#" /> <!--- METADATA CORRECT --->
<cfabort />

画像

ダイレクトダンプ

データ構造のダンプ

4

1 に答える 1