2011-12-16 4 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

похоже @ комментарий Лорана указывает на гораздо лучший ответ. Вы должны использовать это –

+1

Yup, это хорошо. Делает этот дублирующий вопрос, хотя ... – weltraumpirat

+0

На самом деле этот ответ лучший. Решение, связанное с @Laurent, не будет работать, если ваш метод отслеживания является общедоступным. Он говорит, что вызов «public :: trace» будет работать только в том случае, если ваш метод трассировки является конфиденциальным или защищенным, поэтому, если он является общедоступным, он все равно приведет к проблемной рекурсии. Второе решение, которое оно предложило, это сохранение трассировки в статической переменной, но опять же упоминается, что не будет работать, если ваш метод статичен. Таким образом, единственным рабочим решением для публичной статической функции трассировки является наличие отдельного внутреннего класса в вашем файле ActionScript, как показано выше. ИМО. – Triynko

Смежные вопросы