5

ほとんどの検索エンジンでは見つからないため、「var:*」を検索するのは少し難しいです。

var:Object と比較して、 var:* が何を意味するのか正確にはわかりません

次のようなオブジェクトに任意のプロパティを設定できると思いました:

var x:*  = myObject;
x.nonExistantProperty = "123";

しかし、これは私にエラーを与えます:

Property nonExistantProperty not found on x

* の正確な意味は何ですか?

編集:元の var:* を正しい var x:* に修正しました。インターネット接続が失われた

4

5 に答える 5

12

他の回答を拡張して、型アスタリスクで何かを宣言することは、型なしのままにすることとまったく同じです。

var x:* = {};
var y = {}; // equivalent

ただし、存在しないプロパティをオブジェクトに割り当てることができるかどうかの問題は、参照の型とは関係なく、オブジェクトが動的クラスのインスタンスであるかどうかによって決まります。

たとえば、Object は動的であり、String は動的ではないため、次のようになります。

var o:Object = {};
o.foo = 1; // fine
var a:* = o;
a.bar = 1; // again, fine

var s:String = "";
s.foo = 1; // compile-time error
var b:* = s;
b.bar = 1; // run-time error

使用する参照の種類に関係なく、常に新しいプロパティをオブジェクトに割り当てる方法に注意してください。同様に、文字列に新しいプロパティを割り当てることはできませんが、型指定された参照を使用すると、これはコンパイラによってキャッチされます。型指定されていない参照では、コンパイラbは動的かどうかを認識できないため、エラーが発生しますランタイム。

ちなみに、タイプアスタリスクに関するドキュメントリファレンスは次の場所にあります。

http://livedocs.adobe.com/labs/air/1/aslr/specialTypes.html# *

(アスタリスクがあるため、マークアップ エンジンはそれをリンクすることを拒否します。)

于 2008-10-17T00:57:04.073 に答える
2

これは、型指定されていない変数を指定する方法であり、基本的に任意の型を割り当てることができます。コード

var x:* = oneTypeObject;

変数xを作成し、oneTypeObjectそれに変数を割り当てます。次のように、まったく異なるタイプを割り当てることができます。

var x:* = anotherTypeObject;

ただし、プロパティを任意に設定したりアクセスしたりすることはできません。それらは、基になるタイプ(またはのいずれoneTypeObjectanotherTypeObject)に存在する必要があります。

どちらのタイプにも同じ名前のプロパティがある場合がありますx。つまり、基になるタイプを気にすることなく、そのプロパティにアクセスまたは設定できます。

于 2008-10-16T05:49:18.417 に答える
1

それは「型なし」タイプです。これは、変数が任意の型になる可能性があることを意味します。基本的にこれを使用するのと同じ効果:

var x = myObject;
于 2008-10-16T05:11:38.257 に答える
1

これは、型が指定されておらず、任意の型で使用できることを意味します。ただし、ランダムなプロパティを設定することはできません。設定したタイプと同じように動作します。正確な構文は次のとおりです。

var x:*;
于 2008-10-16T05:12:41.343 に答える
0

前に言ったように、それは型付けされていないため、あらゆる種類のデータを保持できます。ただし、操作ではそのように扱うことはできません。たとえば、これは有効なコードです。

var untyped:* = functionThatReturnsSomeValue();

しかし、一歩踏み出すと、気をつけないと噛まれてしまうかもしれません。

var name:String = untyped.name;

ここで、その関数によって返されたオブジェクトがたまたま「name」という ID を持つフィールドを持つオブジェクトである場合、問題はありません。ただし、これが事実であることが確実にわかっている場合を除き、型付きオブジェクトを使用することをお勧めします。このようにして、実行時にエラーをスローする可能性のある操作を行うと、コンパイラは警告を発します。

(elsewhere)
public class TypedObject()
{
    public var name:String = "";
}

(and the code at hand)
var typed:TypedObject = functionThatReturnsTypedObject();
var name:String = typed.name;
于 2013-02-14T20:59:33.287 に答える