2008-10-16 19 views
5

Es un poco complicado buscar 'var: *' porque la mayoría de los motores de búsqueda no lo encuentran.¿Qué significa exactamente var x: * en actionscript?

No me queda claro exactamente lo var: * medios, comparado con decir var: Objeto

pensé que me dejaría establecer las propiedades arbitrarias en un objeto como:

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

pero esto da me un error:

Property nonExistantProperty not found on x 

¿Qué significa * mean exactamente?

Editar: He arreglado la var original * a la var x correcta: *. Perdí mi conexión a Internet

Respuesta

1

Es del tipo "sin tipo". Simplemente significa que la variable puede ser de cualquier tipo. Básicamente, el mismo efecto que el uso de este:

var x = myObject; 
1

Esto significa que el tipo no se especifica y se puede utilizar con cualquier tipo. Sin embargo, no puede establecer propiedades aleatorias en él. Se comportará como cualquier tipo que lo configure. La sintaxis exacta es:

var x:*; 
2

Es una forma de especificar una variable sin tipo para que, básicamente, puede asignar cualquier tipo a la misma. El código

var x:* = oneTypeObject; 

crea la variable x se asigna la variable oneTypeObject a ella. Puede asignar un tipo totalmente diferente a ella, así como de la siguiente manera:

var x:* = anotherTypeObject; 

propiedades Sin embargo, todavía no se puede establecer de forma arbitraria o de acceso; tienen que existir en el tipo subyacente (de oneTypeObject o anotherTypeObject).

Ambos tipos pueden tener propiedades con nombre idéntico, lo que significa que puede acceder o establecer esa propiedad en x sin tener que preocuparse por el tipo subyacente.

12

Expandir en las otras respuestas, declarar algo con tipo asterisco es exactamente lo mismo que dejarlo sin tipo.

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

Sin embargo, la cuestión de si se le permite asignar propiedades inexistentes a objetos no tiene nada que ver con el tipo de la referencia, y está determinada por si el objeto es una instancia de una dinámica clase.

Por ejemplo, ya que es dinámico y objetos de cadena no es:

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 

Nota cómo siempre se puede asignar nuevas propiedades al objeto, independientemente de qué tipo de referencia que utilice. Del mismo modo, nunca puede asignar nuevas propiedades a la Cadena, pero si utiliza una referencia tipeada, esta será captada por el compilador, y con una referencia sin tipo el compilador no sabe si b es dinámico o no, por lo que se produce el error en tiempo de ejecución.

Incidentalmente, la referencia doc del tipo-asterisco se puede encontrar aquí:

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

(. El motor de marcado se niega a Linkify que, debido a la asterisco)

0

Como dijeron antes, está sin tipo, por lo que puede contener cualquier tipo de datos. Sin embargo, no puedes tratarlo como tal en las operaciones. Por ejemplo, este es un código válido:

var untyped:* = functionThatReturnsSomeValue(); 

Pero si usted va un paso más allá, hay que mirar hacia fuera o puede que es mordido:

var name:String = untyped.name; 

Ahora, si el objeto devuelto por esta función pasa a ser un objeto con un campo con una identificación de "nombre", estás en el claro. Sin embargo, a menos que sepa con certeza que este es el caso, es mejor usar objetos tipeados. De esta forma, el compilador lo alertará si hace algo que pueda generar un error en el tiempo de ejecución:

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

(and the code at hand) 
var typed:TypedObject = functionThatReturnsTypedObject(); 
var name:String = typed.name; 
Cuestiones relacionadas