質問

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] ints以外の参照です。一般化するには、 Object を継承するすべてのものが参照によって関数に渡されます。

そうは言っても、できると信じる唯一の方法は、 Array String (" 5"などのコンテナークラスを使用して変換を行うことです+ math)。

他のヒント

googledソースの引用:

  

ActionScript 3.0では、すべての値はオブジェクトとして保存されるため、すべての引数は参照によって渡されます。ただし、Boolean、Number、int、uint、Stringなどのプリミティブデータ型に属するオブジェクトには、値で渡されたかのように動作する特別な演算子があります。

標準ソースを検索するようになりました。

文字列、整数、単位、ブール値は値によって渡されるようです。 Flashでこの小さなスニペットを試してみましたが、結果は否定的でした:

function func(a:String){
    a="newVal";
}

var b:String = "old";

trace(b)    //  old
func(b);
trace(b)    //  old

それで...文字列もブラックリストに登録されたデータ型ですか?ブール値も? 参照によって渡される型は確かにわかりますという意味ですか?

すべての価値があります。Cプログラミングを理解していれば、ポインタの概念に精通しています。

ポインタがメモリ内の何かを指していると考えてください。また、すべての変数名" bob from(bob = new person();)"基本的には、使用するポインターです。

今、関数を宣言するとき、それらはすべて値によるものであるため

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ポインターは常に「null」を指します。および「メモリ内の新しいスプライト」それぞれ、「スコープ」内でs1およびs2として変更されない限り、 <-これに取り組む前に、変数スコープを理解してください。

そして、関数内に2つの新しいポインター" a"が追加されました。 「null」を指すおよび「b」 「メモリ内のs2と同じスプライト」を指します。したがって、オブジェクトと配列は本質的にポインタのコレクションであり、「a」を使用するために関数によって作成された新しいポインタは2つだけです。および「b」プロパティ/公開変数"メモリ内のデータへのポインタ" 「a」のまたは" b"まだ「s1」の場合とまったく同じになります。および「s2」とは、まったく同じポインターです。

したがって、関数内で" a" " b"に設定されますが、実際に起こるのは" a"ポインターは、「b」と同じものを指すようになりました。しかし、「s1」はおよび「s2」まだ彼らが前に指していたものを指している。

!!!! これが参照によるものである場合、「a」を考えることはできません。および「b」新しいポインターとして、実際には「s1」になります。および「s2」ただし、「a」として書き出す場合を除きます。および" b"。

Wrong Wrong Wrong and Wrong ..すべての引数は値で渡されます!!! 渡されたオブジェクト内のプロパティを変更できるということは、オブジェクト自体を変更できるという意味ではありません。次のコードを試してください

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

ポイントビーイング: 参照が指しているものを変更することはできませんが、参照がオブジェクト/配列である限り、参照が指しているデータを変更することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top