2012-01-24 5 views
2

ポインタの概念やas3と似たものはありますか?as3のポインタに似た概念ですか?

は私が読んで、この概念についての詳細を学ぶためになるだろう

var mc1:MovieClip; 
var mc2:MovieClip(); 
var mcCommon:MovieClip = new MovieClip(); 
mcCommon["myptr"] = mc1; 
mcCommon["myptr"] = mc2; 

の概念を使用していました。私はas3の専門家ではないので、簡単な回答を得たいです。まだ勉強してる。

答えて

2

あなたはそれが次のようになりますすべての最初の、コードについては特に求めている場合は、次の

var mc1:MovieClip; 
var mc2:MovieClip; 
var mcCommon:MovieClip = new MovieClip(); 
mcCommon["myptr"] = mc1; 
mcCommon["myptr"] = mc2; 

をMC1とMC2の両方が実際にnullであるが。

構文mcCommon ["myptr"]は、MovieClip mcCommonに "myptr"という名前のプロパティを作成することを意味します。したがって、後でmcCommon ["myptr"]を使用してこのプロパティのコンテンツを取得できます。最後の行は実際にプロパティの内容を上書きします(もちろんnullでない場合)。 MovieClipクラスは動的なので、これを行うことができます。他の(動的でない)インスタンスでは、このようなプロパティを作成することはできません。

+0

+1お返事ありがとうございます。 – Vishnu

1

同じことではありませんが、あなたが探しているものはDictionaryです。コレクション内のすべてのプロパティには、Stringがアクセスできるキーとして含まれています。

私は特にしばらくのポインタを使用する言語でコーディングされていない、と私は、これはあなたが求めている正確に何であるかわからないんだけど、ここにあなたの質問に答えるの試みだ
+2

正確ではない:非Stringキーを使用できます。 – AsTheWormTurns

8

AS3でObjectへの変数参照は、基本型(Strings、Numbers、int、およびBooleans)を除いて常にポインタです。これらは常にバイナリのみです。

そうでは、基本的なタイプのために、あなたは「値による」動作を取得:

var a:String = "hello"; 
var b:String = a; // b is a new String, a clone of a 
b += " world"; 
trace(a); // hello 
trace(b); // hello world 

Bへの変更は、変数を変更しませんでした。あるいは、aとbが2行目以降の同じStringへの参照であると言えるかもしれませんが、+ =演算子は新しいStringを作成してbに代入します。 String documentationを見ると、実際にStringをインプレースで変更するメンバー関数はなく、新しいStringをすべて返すことに注意してください。

あなたは機能と同じ動作が単純で、非ポインタパラメータで呼び出して表示されます:

function wont_modify(word:String):String 
{ 
    word += " world"; 
    return word; 
} 
var a:String = "hello"; 
trace(wont_modify(a)); // hello world 
trace(a); // hello 

はしかし、非単純型のため、アクセスはによって参照され(ポインタと呼ばれるもの他の言語で):あなたは文字列のような単純なタイプの「ポインタのような」行動をし​​たい場合は

var a:Array = [1, 2, 3]; 
var b:Array = a; // b is now a reference to a 
b.push(4); 
trace(a); // [1, 2, 3, 4] 
trace(b); // [1, 2, 3, 4] 

、それはあなたの周りの参照を通過するため、ポインタのようなオブジェクトのメンバーである必要があります。

function will_modify(obj:Object):void 
{ 
    obj.a += " world"; 
} 
var obj:Object = { a:"hello" } 
will_modify(obj); 
trace(obj.a); // hello world 

実際にStringとNumbersは実際にObjectを拡張しますが、すべての演算子と関数呼び出しは参照によってではなく値で扱います。

+0

+ 1参照渡しに関する答えは+1。ありがとうございます – Vishnu