Переключающая булева задача - PullRequest
2 голосов
/ 12 сентября 2010

этот код написан на простом ActionScript, но я предполагаю, что эта проблема возникнет на всех языках с логическими типами данных.

Я просто щелкаю по сцене, чтобы моя логическая переменная обращала своюзначение, а затем отслеживает / печатает / записывает это новое значение.однако для каждого щелчка мыши всегда выполняется трассировка true, а не переключение между true и false.

что я делаю неправильно?

var myBool:Boolean;

stage.addEventListener(MouseEvent.CLICK, mouseClickHandler);

function mouseClickHandler(evt:MouseEvent):void
    {
    changeBoolean(myBool);
    }

function changeBoolean(boolean:Boolean):void
    {
    boolean = !boolean;
    trace(boolean);
    }

Ответы [ 2 ]

5 голосов
/ 12 сентября 2010

Вы передаете значение функции, а не ссылку.Это означает, что логическое значение внутри вашей функции changeBoolean копируется из переменной myBool, поэтому, когда вы изменили его внутри функции, оно не изменило переменную myBool.Есть два основных решения:

  1. изменить функцию, чтобы она не принимала параметры, и внутри нее изменить переменную myBool или
  2. изменить функцию, чтобы она возвращала логический параметр и при вызовефункция, установите значение myBool для результата функции
4 голосов
/ 12 сентября 2010

В функции changeBoolean вы меняете значение параметра boolean (кстати, плохое имя - старайтесь избегать именования коллизий со встроенными типами, даже с другим регистром). Это не действует вне этой функции.

Вы хотите изменить значение myBool (которое я бы назвал полем класса в .Net или Java).

function mouseClickHandler(evt:MouseEvent):void
    {
    myBool = !myBool;
    trace(myBool);
    }

... это то, что я бы сделал (опять же, с наивным пониманием ActionScript).

...