Actionscript 切换布尔问题

Actionscript 切换布尔问题,actionscript,boolean,toggle,Actionscript,Boolean,Toggle,这段代码是用简单的ActionScript编写的,但我假设我的这个问题会出现在所有具有布尔数据类型的语言中 我只需单击stage,这样我的布尔变量就可以反转它的值,然后跟踪/打印/记录它的新值。但是,它总是跟踪true,而不是在每次鼠标单击时在true和false之间切换 我做错了什么 var myBool:Boolean; stage.addEventListener(MouseEvent.CLICK, mouseClickHandler); function mouseClickHand

这段代码是用简单的ActionScript编写的,但我假设我的这个问题会出现在所有具有布尔数据类型的语言中

我只需单击stage,这样我的布尔变量就可以反转它的值,然后跟踪/打印/记录它的新值。但是,它总是跟踪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);
    }

在函数
changeBoolean
中,您正在更改
boolean
(顺便说一句,名称不好-尽量避免与内置类型发生命名冲突,即使大小写不同)参数的值。这在该功能之外没有任何影响

您想改为更改
myBool
(我在.Net或Java中称之为class字段)的值


…是我将要做的(同样,我对ActionScript有着天真的理解)。

您正在向函数传递一个值,而不是引用。这意味着changeBoolean函数中的布尔值是从myBool变量复制而来的,因此当您在函数中更改它时,它并没有真正更改myBool变量。基本上有两种解决方案:

  • 将函数更改为不接受参数,并在其中更改myBool变量或
  • 更改该函数,使其返回布尔参数,并在调用该函数时,将myBool值设置为该函数的结果

  • 啊。。。有道理。因为我使用了很多布尔变量,所以在传递它的值时,我只需要反转布尔值:changebool(myBool=!myBool);我发现这令人困惑,因为如果我将其他对象(如显示对象)传递给函数,那么我可以更改它们。这是否意味着原语数据类型仅作为其值传递给函数,而其他非原语数据类型作为其自身传递?这是一般规则吗?是的,值类型是按值传递的,而引用类型是作为引用传递的(在函数内部对它们所做的一切都会影响函数外部的引用)。引用类型通常是类,而值类型通常是系统类型(布尔、整数、字符等)、枚举和结构。
    function mouseClickHandler(evt:MouseEvent):void
        {
        myBool = !myBool;
        trace(myBool);
        }