Parceros
  • 馃懡Recursos
    • 馃捇Nodos validadores
      • Buenas pr谩cticas y seguridad de un validador
      • Montaje de nodo validador de Stargaze
      • Montaje de nodo validador de Tgrade
      • Montaje de nodo validador de Juno
      • Instalacion del Cosmovisor
      • Instalaci贸n de AutoCompound
      • Gu铆a de instalaci贸n Prometheus y Grafana para un Validador
    • 馃帗Desarrollo
      • Fundamentos en Gnu/Linux
      • Fundamentos en Blockchain
      • Billeteras
      • Introducci贸n a Cosmos Hub
      • Guia de Inicio en Rust
      • Clases de CosmWasm
        • Introducci贸n a CosmWasm
        • Puntos de entrada de un contrato vacio
        • Consultas - Query
      • Clases de Rust
        • Introducci贸n a Rust
        • Ciclos
        • Funciones
        • Manejo de la memoria
        • Tipos de datos avanzados
        • Macros
        • Manejo de paquetes
        • Manejo de errores
      • Guia Archway
        • Instalaci贸n de requisitos
        • Configuraci贸n del proyecto
        • Solicitud de tokens Testnet
        • Mi primera app
          • Configuracion
          • Produciendo ejecutables wasm
          • Despliegue e instanciaci贸n de contratos en la cadena
          • Interactuar con su contrato
          • Construir el frontend de la dApp
        • Proyecto NFT
          • Creando un proyecto NFT
          • Despliegue del contrato de tokens
          • Acu帽aci贸n y env铆o de tokens
          • Construye la Dapp NFT
        • Fee Grant
          • Comprendiendo los Fee grant
          • Grant asignaci贸n
          • Utilizando asignaciones grant
        • Multifirmas
          • Archway multi firma hub
          • Navegar por la interfaz multi firmas
      • Cosmwasm Documentacion
        • Introducci贸n
        • Primeros pasos
          • Introducci贸n
          • Configuraci贸n del entorno
          • Elaborar un contrato
          • Test Unitarios
          • Despliegue e interacci贸n
          • Integraci贸n con contratos inteligentes
          • Pr贸ximos pasos
        • Arquitectura
          • 驴Qu茅 son los contratos multicadena?
          • Modelo de actor para las convocatorias de contratos
          • Nombres y direcciones
          • Consulta del estado del contrato
          • Formatos de serializaci贸n
          • Composici贸n del contrato
          • Comparaci贸n con los contratos de solidity
        • Contratos inteligentes
          • Sem谩ntica contractual
          • Message
            • Messages
            • Submensajes
          • State
            • Simple state
            • Complex state y maps
          • Result y option
          • Entry points
          • Query
          • Events
          • Math
          • Verificaci贸n de contratos inteligentes
          • Migration
          • Migrar una dapp a una red diferente
          • Testing
          • Ejecuci贸n Sudo
          • CosmWasm y CIB
        • Tutoriales
          • Opcion simple
            • Testing
          • Storage
            • 驴C贸mo funciona el almacenamiento de valores clave?
            • 脥ndices
            • Modelizaci贸n avanzada de estados
          • Cosmwasm con ejemplos
            • Operaciones matem谩ticas de Cosmowasm
            • Crear una instancia de un contrato CosmWasm
            • Timelock
            • Contrato Crowdfunding
            • Respuestas y atributos en Cosmwasm
            • Lee y escribe
            • Env铆o de tokens
            • Token Vaults
            • Creador de mercado autom谩tico de productos constantes (AMM)
      • Guia Celestia
        • Descripcion general de celestia
          • Introduccion
          • Blockchains monol铆ticos vs modulares
          • Capa de disponibilidad de datos
            • La capa de disponibilidad de datos de Celestia
            • El ciclo de vida de una transacci贸n celestia-app
            • Recuperabilidad de datos y poda
            • Disponibilidad de datos FAQ
          • Recursos adicionales
            • Aprende modular
            • Glosario de Celestia
            • Especificaciones de aplicaci贸n de celestes
            • Documentaci贸n API de nodo celestial
        • Ejecutar un nodo
          • Descripci贸n general de los nodos en ejecuci贸n en Celestia
          • Gu铆a de inicio r谩pido
            • Decidir qu茅 nodo ejecutar
            • Entorno de desarrollo
            • Instalar celestia-node
            • Instalar celestia-app
            • 馃惓 Configuraci贸n de Docker
          • Redes
            • Resumen de redes
            • Mainnet Beta
            • Mocha testnet
            • Ar谩bica devnet
          • Tipos de nodos
            • Disponibilidad de datos
              • Nodo ligero
              • Nodo completo
              • Nodo puente
            • Consenso
            • Relay de IBC
              • Gu铆a de retransmisi贸n IBC
              • Relays de IBC
          • Recursos
            • nodo-celestia
              • Metricas
              • gu铆a config.toml
              • Redes y valores personalizados
              • Soluci贸n de problemas
            • celestia-app
              • Especificaciones
              • M茅tricas, visualizaci贸n y alertas
              • Mec谩nica de corte
              • Crear un testnet Celestia
              • Comandos CLI 煤tiles
              • Monitor de Actualizaci贸n
              • Carteras en celestia-app
              • Multisig
              • Crea una cuenta de adquisici贸n
            • SystemD
            • Proceso de hardfork
        • Desarrolladores
          • Construir modular
          • Env铆o de blobs de datos a Celestia
          • Directrices de reenv铆o de transacciones
          • API de nodo
            • Celestia-node RPC CLI tutorial
            • Documentaci贸n de la API RPC de Celestia-Node
            • R谩pido Scavenger
            • Page
          • Integrar con Blobstream
            • Descripci贸n general de Blobstream
            • Integrarse con contratos de Blobstream
            • Integrar con el cliente Blobstream
            • Consultando las pruebas de Blobstream
            • Operadores locales de Blobstream X
              • Solicitar rangos de compromiso de datos
              • Nuevas implementaciones de Blobstream X
          • Implementar un rollup
            • L2s Ethereum
              • Ethereum fallback
              • Arbitro
                • Introducci贸n a los rollups de Arbitrum con Celestia como DA
                • Implementar un arbitrum rollup devnet
                • Testnet de nitr贸geno
                • Implementar un contrato inteligente sobre la implementaci贸n de Arbitrum
                • Implemente un dapp en su devnet Arbitrum rollup
                • Optimismo
                  • Introducci贸n a la integraci贸n de OP Stack
                  • Bubs testnet
                  • Implemente un contrato inteligente en Bubs testnet
                  • Implemente un dapp en Bubs testnet
                  • Implemente un devnet OP Stack
                  • Implemente un devnet OP Stack en Celestia
                  • Auditor铆a
                  • Implemente un dapp con thirdweb
                  • Rollups-as-a-Servicio
                    • Caldera
            • Rollkit
            • Astria
              • Documentaci贸n
              • Implementar a Dusknet
            • SDK Soberano
            • Vistara
            • Dimensi贸n
          • Carteras
            • Crea una billetera con celestia-node
            • Integraciones de billeteras con Celestia
          • Integre Celestia para proveedores de servicios
      • Uni贸n
        • Arquitectura
          • CometBLS
          • Galois
          • Voyager
        • Conceptos
          • BLS Firmas
          • Clientes de Luz Condicional
          • Verificaci贸n de Consenso
          • Tecnolog铆a de validador distribuido
          • IBC
          • Sin permiso versus sin confianza
        • Infraestructura
          • Operador de nodo
            • Empezando
            • Docker Compose
            • Kubernetes
            • NixOS
            • Configuraci贸n del Nodo
        • Integracion
          • IBC Enabled Solidity
        • Demostrar
          • Dirigiendo el Union Devnet
          • PingPong
        • Unirse al testnet
          • Empezando
          • Ejecutar el binario cliente
          • Ejecuci贸n de Unionvisor
          • Obteniendo Tokens Testnet
          • Crear un Validador
          • Endpoints publicos
          • Sincronizaci贸n de estado
          • Liberar un validador
          • Preguntas frecuentes
          • Historial de actualizaciones
        • Guia de estilo
          • Lista de palabras
      • Avail
        • Introducci贸n a Avail
          • Aprovechar DA
          • Aprovechar Nexus
          • Aprovechar la fusi贸n
        • Informacion de red
        • M谩s informaci贸n sobre disponibilidad
          • El conseso
            • BABE
            • GRANDPA
            • NPoS
          • EIP-4844 y disponible
        • Guia de nuevo usuario
          • C贸mo crear y administrar una cuenta disponible
          • C贸mo utilizar el Explorador Goldberg Testnet
          • C贸mo utilizar el faucet Testnet
          • C贸mo establecer una identidad en cadena
          • C贸mo generar una identificaci贸n de aplicaci贸n disponible
          • C贸mo realizar transferencias de saldo disponibles
          • C贸mo crear grupos de nominaciones disponibles
        • Construir con disponibilidad
          • Cree un paquete acumulativo con Avail
          • Comience con Avail
          • Optimium
            • OP Stack
            • Aprovechando la pila OP con Avail
            • C贸mo utilizar la pila OP con Avail
            • Adaptador de pila OP 馃敆
          • Validium
            • Polygon zkEVM
              • Construyendo sobre Polygon zkEVM con Avail
              • C贸mo utilizar Polygon zkEVM con Avail
              • Nodo Validium 馃敆
              • Contratos de Validium 馃敆
              • Puente Validium 馃敆
            • Madara Starknet
              • Construyendo sobre Madara Stack con Avail
              • C贸mo utilizar Madara con Avail
              • Madara Starknet馃敆
            • Referencia
          • Sovereign Rollups
            • Sovereign SDK 馃敆
            • Rollkit 馃敆
            • OpEVM 馃敆
        • Glosario
        • Preguntas generales frecuentes
      • Dymension
        • Aprender
          • ELI5
          • RollApps
            • RollApps
            • Tokens
            • Gobernancia
            • Puente
            • En profundidad
              • Dymension RDK
                • Dymint
              • Gobernanza
                • Gobernador
                  • Descripci贸n general
                  • Crear gobernador
                  • Otros comandos
                • Votaci贸n
                  • Par谩metros ajustables
                  • Gasto comunitario
                  • Registro de tokens ERC-20
              • IBC Puente
                • Visi贸n general
                • Seguridad
                • Retransmisores
          • Dymension
            • Visi贸n general
            • DYM
              • Supply
              • Demanda
              • Crecimiento
              • Distribuci贸n
            • Seguridad
              • Est谩ndares
              • Actualizable
              • Disponibilidad de datos
              • Pruebas de fraude
              • Resistencia a la censura
              • Page 1
            • Puentes
              • IBC
              • eIBC
            • Liquidez
              • Descripci贸n general
              • Depositar tokens
              • Vinculaci贸n de tokens LP
              • Incentivos
              • Comisiones
            • Gobernanza
              • Descripci贸n general
              • Preparando una propuesta
              • Proponiendo a la dimocracia
        • Construir
          • Descripci贸n general
          • Testnet
            • EVM
              • Descripci贸n general
            • CosmWasm
              • Descripci贸n general
              • Informaci贸n
              • Ejemplo de cosmoWasm
          • Roller CLI
            • Descripci贸n general
            • Comenzar
              • Instalar
              • Inicializar RollApp
              • Registro
              • Correr
                • Simple
                • Avanzado
                  • Cliente ligero DA
                  • Secuenciador
                  • Retransmisor
            • Nodo en ejecuci贸n
              • Ejecutando en producci贸n
              • Supervisi贸n
              • Informaci贸n de RollApp
              • Exportar claves
              • Mejora
              • Editar la configuraci贸n de RollApp
              • Sincronizaci贸n de estado
            • Soluci贸n de problemas
              • Descripci贸n general
              • Saldos
              • Hardware
              • Rollapp de importaci贸n/exportaci贸n
              • Acceso externo
              • Estado
              • Archivos de registro
            • RollApp local
              • Ejecute la aplicaci贸n EVM RollApp
              • Ejecute la aplicaci贸n CosmWasm RollApp
        • Validar
          • Preguntas frecuentes sobre nodos
          • Construir dimensi贸n
          • Configuraci贸n de nodo
          • 脷nase a una red
          • Nodo de sincronizaci贸n
          • Validador
          • Actualizaciones
          • Soluci贸n de problemas
          • Programa de delegaci贸n
            • objetivos del programa
            • Par谩metros de evaluaci贸n
            • Solicitud
      • Movement
        • Desarrolladores
          • Inicio r谩pido
          • Configuraci贸n
            • Usando contenedores
            • Usando el instalador
          • Tutoriales
            • Desplegar
              • M贸dulo Aptos
              • M贸dulo Sui
              • Contratos EVM
                • Implementaci贸n de contratos de solidez en movimiento utilizando Foundry y Fractal
                • Implementaci贸n de contratos de solidez en M1 usando Hardhat y Fractal
                • Implementaci贸n de contratos inteligentes de Solidity en M1 utilizando el tiempo de ejecuci贸n Fractal
            • Ejecute MoveVM
              • Ejecutando M1 usted mismo
            • Construir dApp
              • Aptos Move dApp
              • Aplicaci贸n Sui Move
              • DApp de solidity
            • Interoperar
              • AptosVM<>MEVM
          • Herramientas de desarrollo
            • Movement CLI
              • Movement aptos
                • cuenta
                  • crear
                  • crear-cuenta-de-recursos
                    • derivar-direcci贸n-de-cuenta-de-recursos
                  • fondo-con-grifo
                  • lista
                  • direcci贸n de b煤squeda
                  • rotar llave
                  • transferir
                • configuraci贸n
                  • generar-compleciones-de-shell
                  • configurar-global-config
                  • show-global-config
                  • mostrar-perfiles
                • g茅nesis
                  • generar-admin-escritura-conjunto
                  • generar-g茅nesis
                  • obtener direcciones de grupo
                  • generar-claves
                  • generar-plantilla-de-dise帽o
                  • configuraci贸n-git
                  • configuraci贸n-del-validador-de-conjuntos
                • gobernancia
                  • proponer
                  • votar
                  • propuesta de show
                  • lista-propuestas
                  • verificar-propuesta
                  • ejecutar propuesta
                  • generar-propuesta-de-actualizaci贸n
                  • aprobar-ejecuci贸n-hash
                • informaci贸n
                • init
                • llave
                  • generar
                  • extraer-peer
                • mover
                  • construir-publicar-carga 煤til
                  • limpio
                  • compilar
                  • script de compilaci贸n
                  • cobertura
                    • resumen
                    • fuente
                    • c贸digo de bytes
                  • crear-cuenta-de-recursos-y-publicar-paquete
                  • desmontar
                  • documento
                  • descargar
                  • init
                  • list
                  • probar
                  • publicar
                  • correr
                  • ejecutar gui贸n
                  • prueba
                  • prueba transaccional
                  • verificar-paquete
                  • vista
                • multifirma
                  • aprobar
                  • crear
                  • crear-transacci贸n
                  • ejecutar
                  • ejecutar-rechazar
                  • ejecutar con carga 煤til
                  • rechazar
                  • verificar-propuesta
                • nodo
                  • analizar-validador-rendimiento
                  • arranque-db
                  • verificar-conectividad-de-red
                  • conseguir-participaci贸n-pool
                  • inicializar-validador
                  • conjunto de validadores de uni贸n
                  • conjunto de validadores de licencia
                  • mostrar-informaci贸n-de-茅poca
                  • mostrar-validador-config
                  • mostrar-conjunto-validador
                  • mostrar-validador-participaci贸n
                  • ejecutar-testnet-local
                  • actualizaci贸n-clave-de-consenso
                  • actualizar-validador-direcciones-de-red
                • apostar
                  • agregar apuesta
                  • crear-contrato-de-participaci贸n
                  • distribuir-monedas-adquiridas
                  • aumentar-bloqueo
                  • inicializar-propietario de la participaci贸n
                  • solicitud-comisi贸n
                  • establecer-votante-delegado
                  • operador de conjunto
                  • desbloquear-apuesta
                  • desbloquear-monedas-adquiridas
                  • retirar-apuesta
                • actualizar
              • movement sui
                • comenzar
                • g茅nesis
                • ceremonia-genesis
                  • init
                  • estado de validaci贸n
                  • agregar-validador
                  • validadores de lista
                  • punto de control de compilaci贸n sin firmar
                  • examinar-punto-de-control-g茅nesis
                  • verificar y firmar
                  • finalizar
                • herramienta clave
                  • convertir
                  • decodificar-tx-bytes
                  • decodificar-multi-sig
                  • generar
                  • importar
                  • lista
                  • par de claves de carga
                  • direcci贸n multifirma
                  • multi-sig-combinar-sig-parcial
                  • herencia-sig-parcial-combinada-multi-sig
                  • espect谩culo
                  • firmar
                  • se帽al-kms
                  • deshacer
                  • zk-login-firmar-y-ejecutar-tx
                  • zk-login-ingresar-token
                  • zk-login-sig-verificar
                  • zk-login-signo-inseguro-mensaje-personal
                • consola
                • cliente
                  • direcci贸n activa
                  • entorno-activo
                  • direcciones
                  • llamar
                  • identificador de cadena
                  • campo din谩mico
                  • env
                  • ejecutar-tx firmado
                  • gas
                  • fusionar moneda
                  • nueva direccion
                  • nuevo-ambiente
                  • objeto
                  • objetos
                  • pagar
                  • pago todo-sui
                  • pay-sui
                  • publicar
                  • moneda dividida
                  • cambiar
                  • bloque tx
                  • transferir
                  • transferencia-sui
                  • mejora
                  • verificar-bytecode-metro
                  • verificar-fuente
                  • transacci贸n-repetici贸n
                  • lote de repetici贸n
                  • punto de control de repetici贸n
                • validador
                  • hacer-informaci贸n-validador
                  • convertirse en candidato
                  • comit茅 conjunto
                  • comit茅 de licencia
                  • metadatos de visualizaci贸n
                  • actualizar-metadatos
                    • nombre
                    • descripci贸n
                    • URL de la imagen
                    • URL del proyecto
                    • direcci贸n de red
                    • direcci贸n primaria
                    • direcci贸n-trabajador
                    • direcci贸n-p2p
                    • clave-pub-de-red
                    • clave-pub-trabajador
                    • protocolo-pub-clave
                  • actualizar-precio-de-gas
                  • validador de informes
                  • serializar-carga 煤til-pop
                  • mostrar-actualizaci贸n-del-precio-del-gas-raw-txn
                • move
                  • construir
                  • cobertura
                    • resumen
                    • fuente
                    • c贸digo de bytes
                  • desmontar
                  • nuevo
                  • probar
                  • prueba
                • simulacro de incendio
                  • rotaci贸n de metadatos
              • movement ctl
              • movement manage
            • fractales
              • marco evm
          • Desarrolladores Aptos
            • Configurar la CLI de Aptos
            • Usando la CLI de Aptos
          • Desarrolladores Sui
            • Configurar Sui CLI
            • Usando Sui CLI
          • Preguntas m谩s frecuentes
        • Ecosistema
          • Wallets
          • Tokens
          • Faucet
          • Move idioma
            • M贸dulos y scripts
            • Tipos primitivos
              • Enteros
              • booleano
              • DIRECCI脫N
              • Vector
              • Firmante
              • Referencias
              • Tuplas y unidad
          • Recursos de aprendizaje
          • Techpedia
            • Paralelizaci贸n
            • Mover recursos
            • SDK de movement
      • Initia
        • ACERCA DE
          • Bienvenido a Inicia
          • Arquitectura Omnitia
            • Inicia (Capa 1)
            • Minitia (Capa 2)
          • Ciclo de vida de la transacci贸n
          • Liquidez y apuestas consagradas
            • IniciaDEX
          • Programa de intereses adquiridos
        • CONSTRUIR SOBRE LA INICIATIVA
          • iniciado
          • inicia.js
          • Creando cuenta
          • Tutoriales espec铆ficos de VM
            • MoverVM
              • Implementaci贸n de m贸dulos de movimiento
              • Creando moneda de movimiento
              • Env铆o de moneda de movimiento
              • Creando movimiento NFT
              • M贸dulos relacionados con el replanteo
              • Interactuar con Oracle en MoveVM
              • Mover ganchos IBC
            • WASMVM
              • Implementaci贸n del contrato CosmWasm
              • Interactuando con Oracle en WasmVM
              • Ganchos Wasm IBC
              • F谩brica de fichas
            • EVM
              • Implementaci贸n del contrato de solidez
              • Crear un token ERC-20 personalizado
              • Consultar estados del cosmos
              • Ejecutando mensajes de Cosmos
              • Conversi贸n de direcciones entre EVM y Cosmos
              • Conversi贸n entre direcciones Denom y ERC-20
              • Interactuar con Oracle en EVM
              • Ganchos EVM IBC
              • Ethereum JSON-RPC
          • Tutoriales generales
            • Or谩culo: Furtivo
            • Mensajes entre cadenas
            • Saltar API
            • Miniswap
              • Interactuando con Minitswap
            • Conversi贸n entre nombres de usuario y direcciones
            • Usando el Explorador local de Initia
            • Interactuando con InitiaDEX
            • Usando el widget de billetera Initia
        • IMPLEMENTAR MINITIA
          • Empezando
            • Implementaci贸n de su propia Minitia (Capa 2)
          • Configuraci贸n
          • Implementaci贸n de una Minitia independiente
          • Implementaci贸n completa de Minitia
            • Dirigiendo la Minitia
            • Pila de OPinit
              • M贸dulo OPinit: OPhost y OPchild
              • Configurar robots OPinit
                • Ejecutor del puente
                • Remitente de salida
                • Desafiador
                • Env铆o por lotes
                  • Env铆o de lotes a Inicia L1
                  • Env铆o de lotes a Celestia
            • Rel茅 Hermes (IBC)
            • Habilitando or谩culos
          • Retroceder
          • Agregar tokens a Initia Wallet
          • Personalizando Minitia
        • EJECUTAR EL NODO DE INICIO
          • Ejecutando el nodo de inicio
          • Arrancar un nodo de inicio
          • Con茅ctese a la red Inicial
          • Or谩culo
          • Automatizaci贸n de actualizaciones de software con Cosmovisor
          • Convertirse en un validador
        • RECURSOS
          • Registro de Iniciaci贸n
          • Informaci贸n de la cadena Testnet
          • Par谩metros de cadena
          • Documentaci贸n de la API
          • Documentos API (MiniMove)
          • Documentos API (MiniWasm)
          • Documentos API (MiniEVM)
      • Internet Computer
        • 隆Hola, mundo!
        • Descripci贸n general del ICP
Powered by GitBook
On this page
  1. Recursos
  2. Desarrollo
  3. Movement
  4. Ecosistema
  5. Move idioma
  6. Tipos primitivos

Tuplas y unidad

PreviousReferenciasNextRecursos de aprendizaje

Last updated 11 months ago

Move no es totalmente compatible con tuplas, como cabr铆a esperar si provienen de otro idioma y las tienen como . 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, 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

(e1, ..., en)

(e1, ..., en): (T1, ..., Tn)donde e_i: Tist 0 < i <= nyn > 0

Una ntupla, una tupla de arity n, una tupla con nelementos

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

address 0x42 {
module example {
    // all 3 of these functions are equivalent

    // when no return type is provided, it is assumed to be `()`
    fun returns_unit_1() { }

    // there is an implicit () value in empty expression blocks
    fun returns_unit_2(): () { }

    // explicit version of `returns_unit_1` and `returns_unit_2`
    fun returns_unit_3(): () { () }


    fun returns_3_values(): (u64, bool, address) {
        (0, false, @0x42)
    }
    fun returns_4_values(x: &u64): (&u64, u8, u128, vector<u8>) {
        (x, 0, 1, b"foobar")
    }
}
}

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 letenlace o en una asignaci贸n.

Por ejemplo:

Copiar

address 0x42 {
module example {
    // all 3 of these functions are equivalent
    fun returns_unit() {}
    fun returns_2_values(): (bool, bool) { (true, false) }
    fun returns_4_values(x: &u64): (&u64, u8, u128, vector<u8>) { (x, 0, 1, b"foobar") }

    fun examples(cond: bool) {
        let () = ();
        let (x, y): (u8, u64) = (0, 1);
        let (a, b, c, d) = (@0x0, 0, false, b"");

        () = ();
        (x, y) = if (cond) (1, 2) else (3, 4);
        (a, b, c, d) = (@0x1, 1, true, b"1");
    }

    fun examples_with_function_calls() {
        let () = returns_unit();
        let (x, y): (bool, bool) = returns_2_values();
        let (a, b, c, d) = returns_4_values(&0);

        () = returns_unit();
        (x, y) = returns_2_values();
        (a, b, c, d) = returns_4_values(&1);
    }
}
}

Para obtener m谩s detalles, consulte Mover variables.

Subtipificaci贸n

Por ejemplo:

Copiar

let x: &u64 = &0;
let y: &mut u64 = &mut 1;

// (&u64, &mut u64) is a subtype of (&u64, &u64)
// since &mut u64 is a subtype of &u64
let (a, b): (&u64, &u64) = (x, y);

// (&mut u64, &mut u64) is a subtype of (&u64, &u64)
// since &mut u64 is a subtype of &u64
let (c, d): (&u64, &u64) = (y, y);

// error! (&u64, &mut u64) is NOT a subtype of (&mut u64, &mut u64)
// since &u64 is NOT a subtype of &mut u64
let (e, f): (&mut u64, &mut u64) = (x, y);

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.

Junto con las referencias, las tuplas son los 煤nicos tipos que tienen en Move. Las tuplas tienen subtipos s贸lo en el sentido de que subtipos con referencias (de forma covariante).

馃懡
馃帗
valor de primera clase
la unidad()
subtipos