Tuplas y unidad
Move no es totalmente compatible con tuplas, como cabr铆a esperar si provienen de otro idioma y las tienen como valor de primera clase . Sin embargo, para admitir m煤ltiples valores de retorno, Move tiene expresiones tipo tupla. Estas expresiones no dan como resultado un valor concreto en tiempo de ejecuci贸n (no hay tuplas en el c贸digo de bytes) y, como resultado, son muy limitadas: s贸lo pueden aparecer en expresiones (normalmente en la posici贸n de retorno de una funci贸n); no pueden vincularse a variables locales; no se pueden almacenar en estructuras; y los tipos de tupla no se pueden utilizar para crear instancias de gen茅ricos.
De manera similar, la unidad()
es un tipo creado por el lenguaje fuente de Move para estar basado en expresiones. El valor unitario ()
no da como resultado ning煤n valor de tiempo de ejecuci贸n. Podemos considerar que la unidad ()
es una tupla vac铆a y cualquier restricci贸n que se aplique a las tuplas tambi茅n se aplica a la unidad.
Puede parecer extra帽o tener tuplas en el idioma dadas estas restricciones. Pero uno de los casos de uso m谩s comunes de tuplas en otros lenguajes es que las funciones permitan que las funciones devuelvan m煤ltiples valores. Algunos lenguajes solucionan esto obligando a los usuarios a escribir estructuras que contengan m煤ltiples valores de retorno. Sin embargo, en Move, no puedes poner referencias dentro de estructuras. Esto requer铆a que Move admitiera m煤ltiples valores de retorno. Todos estos m煤ltiples valores de retorno se insertan en la pila en el nivel de c贸digo de bytes. En el nivel de origen, estos m煤ltiples valores de retorno se representan mediante tuplas.
Literales
Las tuplas se crean mediante una lista de expresiones separadas por comas dentro de par茅ntesis.
Sintaxis | Tipo | Descripci贸n |
|
| Unidad, la tupla vac铆a o la tupla de aridad 0 |
|
| Una |
Tenga en cuenta que (e)
no tiene tipo (e): (t)
, es decir, no hay una tupla con un elemento. Si solo hay un elemento dentro del par茅ntesis, los par茅ntesis solo se usan para desambiguaci贸n y no tienen ning煤n otro significado especial.
A veces, las tuplas con dos elementos se denominan "pares" y las tuplas con tres elementos se denominan "triples".
Ejemplos
Copiar
Operaciones
La 煤nica operaci贸n que se puede realizar actualmente con tuplas es la desestructuraci贸n.
Desestructurando
Para tuplas de cualquier tama帽o, se pueden desestructurar en un let
enlace o en una asignaci贸n.
Por ejemplo:
Copiar
Para obtener m谩s detalles, consulte Mover variables.
Subtipificaci贸n
Junto con las referencias, las tuplas son los 煤nicos tipos que tienen subtipos en Move. Las tuplas tienen subtipos s贸lo en el sentido de que subtipos con referencias (de forma covariante).
Por ejemplo:
Copiar
Propiedad
Como se mencion贸 anteriormente, los valores de tupla realmente no existen en tiempo de ejecuci贸n. Y actualmente no se pueden almacenar en variables locales debido a esto (pero es probable que esta caracter铆stica est茅 disponible pronto). Como tal, las tuplas s贸lo se pueden mover actualmente, ya que copiarlas requerir铆a colocarlas primero en una variable local.
Last updated