Actionscript 切换布尔问题
这段代码是用简单的ActionScript编写的,但我假设我的这个问题会出现在所有具有布尔数据类型的语言中 我只需单击stage,这样我的布尔变量就可以反转它的值,然后跟踪/打印/记录它的新值。但是,它总是跟踪true,而不是在每次鼠标单击时在true和false之间切换 我做错了什么Actionscript 切换布尔问题,actionscript,boolean,toggle,Actionscript,Boolean,Toggle,这段代码是用简单的ActionScript编写的,但我假设我的这个问题会出现在所有具有布尔数据类型的语言中 我只需单击stage,这样我的布尔变量就可以反转它的值,然后跟踪/打印/记录它的新值。但是,它总是跟踪true,而不是在每次鼠标单击时在true和false之间切换 我做错了什么 var myBool:Boolean; stage.addEventListener(MouseEvent.CLICK, mouseClickHandler); function mouseClickHand
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变量。基本上有两种解决方案:
啊。。。有道理。因为我使用了很多布尔变量,所以在传递它的值时,我只需要反转布尔值:changebool(myBool=!myBool);我发现这令人困惑,因为如果我将其他对象(如显示对象)传递给函数,那么我可以更改它们。这是否意味着原语数据类型仅作为其值传递给函数,而其他非原语数据类型作为其自身传递?这是一般规则吗?是的,值类型是按值传递的,而引用类型是作为引用传递的(在函数内部对它们所做的一切都会影响函数外部的引用)。引用类型通常是类,而值类型通常是系统类型(布尔、整数、字符等)、枚举和结构。
function mouseClickHandler(evt:MouseEvent):void
{
myBool = !myBool;
trace(myBool);
}