你可以在AS3功能“的ByRef”参数?
-
22-07-2019 - |
题
不知道如何为从函数返回多个变量强>在ActionScript 3?
任何像VB.NET,你可以有在输入参数的变量强>改性(为ByRef参数)?
Sub do (ByRef inout As Integer)
inout *= 5;
End Sub
Dim num As Integer = 10
Debug.WriteLine (num) '10
do (num)
Debug.WriteLine (num) '50
任何的除了强>返回一个的关联数组强>
return {a:"string 1", b:"string 2"}
解决方案
在AS3一切都是从[U]整数一边的参考。一概而论,继承Object
一切都将通过参考被给予的功能。
这就是说,我相信你能做到这一点是利用一个容器类等的Array
或String
(“5”,并执行转换+数学)的唯一途径。
其他提示
引用一一派源:
在ActionScript 3.0中,所有参数都通过引用传递,因为所有的值被存储为对象。然而,属于该基本数据类型,其中包括布尔,数字,INT,uint和字符串对象,有特殊的经营者,使得它们表现得好像它们是由值来传递。
这使我抬头看正规来源
似乎的字符串,整数,单位,布尔通过值传递。强> 我在Flash试图这个小片断和结果均为阴性:
function func(a:String){
a="newVal";
}
var b:String = "old";
trace(b) // old
func(b);
trace(b) // old
所以...是字符串被列入黑名单的数据类型吗?布尔值吗? 我的意思是什么诉说着一个肯定的方式哪些类型是通过引用传递?
这是所有价值,如果你了解C语言编程,你将熟悉指针的概念。
想想指针指向内存中的东西,而“从(BOB =新的人();)鲍勃”的所有变量名。基本指针和你一起工作。
现在,当你声明的功能,因为它们都是通过值
function Test(a:Object, b:Object):void {
a = b;
}
您可以考虑一下这两个“A”和“B”是新指针,所以只能在“测试”功能,做到既“A”和“B”的存在,并指向内存中的东西。
因此,让我们用它
var s1:Sprite = null;
var s2:Sprite = new Sprite;
Test(s1,s2);
所以S1和S2的指针总是指向“空”和“一个新的Sprite在内存”分别为,除非它们被修改为他们的“范围”内,S1和S2 < - 请确保您以前更了解变量的作用域试图解决此。
和功能内我们现在有两个新的指针“一”指向“空”和“b”指向“相同的子画面存储器中为S2”。所以由于对象和数组基本上是指针和仅两个新的指针的集合已通过使用“a”和“b”的任何属性/暴露变量“指向数据在存储器”的“一”或“b”的函数创建仍然是完全一样的那些为“S1”和“S2”,并且是完全一样的指针。
所以,当“a”被设置为“B”,真正的函数内所发生的一切是“一”,现在指针指向同样的事情为“B”。但是,“S1”和“S2”仍然指向什么他们指着面前。
!!!! 如果这是引用您将无法想到的“A”和“B”作为新的指针,它们实际上是“S1”和“S2”自己,除非你把它们写出来为“A”和“B”
错错误与错误..每个参数通过值传递!!! 你可以通过改变物体内部属性的事实并不意味着你可以改变物体本身。尝试下面的代码
function Test(a:Object, b:Object):void {
a = b;
}
function Test2():void {
var s1:Sprite = null;
var s2:Sprite = new Sprite;
Test(s1,s2);
Trace(s1);
Trace(s2);
}
和这里的跟踪结果:
null
[object Sprite]
请注意DarthZorG的示例之间和这一个从Flash文档的细微差别:
function passByRef(objParam:Object):void
{
objParam.x++;
objParam.y++;
trace(objParam.x, objParam.y);
}
var objVar:Object = {x:10, y:15};
trace(objVar.x, objVar.y); // 10 15
passByRef(objVar); // 11 16
trace(objVar.x, objVar.y); // 11 16
点是: 您不能改变什么引用指向,但你可以改变参考指向,只要该基准是一个对象/阵列中的数据。