2011-12-16 24 views
0

これは後ろのことで、これは愚かな問題に思えます。私は自分自身を持っていて、最初からやってはいけません。クラスに同じ名前の関数がある場合のトップレベル関数

私はクラスDebugを持っています。それはTextFieldをステージに置き、テキストを出力します。

今では、Debug.trace()関数を "通常"のデバッグトレースを内部でも実行しようとしています。

もちろん、これは再帰的ループを引き起こします。

私はトップレベルに別々にアクセスする方法を理解しようとしています。 AS3 :: traceなどの名前空間を使用しようとしましたが、運が悪いです。

私の解決策は、競合を止めるために私の機能の名前を変更することですが、私はそれが最後の手段であることを望みます。したがって、さまざまなソリューションを提案している人は役に立ちます。

私のコード全体で非常に多くの場所で使用されているため、どこに置き換えてもバラッシュになります。

上記の「異なる」ソリューションをありがとうございます。

+4

に見えます。問題を探す方法:) http://stackoverflow.com/questions/8324919/how-to-access-top-level-package-in-actionscript –

+0

あなたの 'trace'関数は静的ではありませんか? – www0z0k

+2

私はあなたが何か別のものを探していることは知っていますが、個人的には弾丸を噛んでtrace()関数の名前を別のものに変更します。これにより、将来の問題がなくなり、次の人のコードをより保守しやすくなります。 – ToddBFisher

答えて

1

trace()はトップレベルの機能であり、デバッグクラスでそれを「オーバーライド」しているため、別の方法で呼び出すことはできません。

可能な回避策は、パブリックDebugクラスの下にプライベートクラスを作成することです。そこでは、あなたがそうのような実際のtrace()をしている呼び出すことができます静的メソッドを置くことができます:多くの人々は、これらの日、「トレース」、その機能を呼び出したいよう

public class Debug 
{ 
    static public function trace(value:*) : void 
    { 

     /* your textfield code */ 

     DebugTrace.debugTrace(value); 
    } 
} 

class DebugTrace 
{ 
    public static function debugTrace(value:*) : void 
    { 
     trace(value); 
    } 
} 
+2

は@ Laurentのコメントがはるかに良い答えを示しているようです。あなたはその –

+1

うん、それを使用する必要があります、それは良いです。しかし、これは重複した質問になります... – weltraumpirat

+0

実際には、この答えは最高です。あなたのトレースメソッドが公開されている場合@Laurentにリンクされたソリューションは動作しません。これは、 "public :: trace"を呼び出すことは、あなたのトレースメソッドがプライベートか保護されている場合にのみ機能するので、それが公開されていても、問題のある再帰を引き起こします。提案した2番目の解決策は、トレースを静的変数に保存することでしたが、メソッドが静的であれば動作しません。したがって、パブリックな静的トレース関数の唯一の解決策は、上記のようにActionScriptファイルに別の内部クラスを持たせることです。 IMO。 – Triynko