O tipo option (opção) pode conter um valor ou pode estar vazio.
No exemplo a seguir, MaybeANumber é um inteiro ?int opcional que não contém nenhum valor. Um novo valor para MaybeANumber é então definido como 42.
var MaybeANumber : ?int = false # unset optional value
set MaybeANumber := option{42} # assigned the value 42
~~~(verse)
MaybeANumber : ?int = option{42} # initialized as 42
MaybeAnotherNumber : ?int = false # unset optional value
|
**Como criar uma option:** você pode [inicializar](verse-glossary#initialize) uma option com um dos seguintes:
* **Sem valor:** Atribua `false` à opção para marcá-la como não definida.
* **Valor inicial:** use a [palavra-chave](verse-glossary#keyword) `option` seguida por `{}` e uma [expressão](verse-glossary#expression) entre `{}`. Se a expressão falhar, a opção será desativada e terá o valor `false`.
Especifique o tipo adicionando `?` antes do tipo de valor esperado para ser armazenado na opção. Por exemplo `?int`.
|
~~~(verse) if (Number := MaybeANumber?): Number # se MaybeANumber não estiver vazio, seu valor será armazenado em Number para você usar. ~~~ |
Como acessar um elemento em uma opção: use o operador de consulta ? com a opção, como MaybeANumber?. Acessar o valor armazenado em um tipo "option" é uma expressão falível porque pode não haver um valor em "option" e, portanto, deve ser usado em um contexto de falha. |
Veja a seguir um exemplo de uso de um tipo de opção para salvar uma referência a um jogador gerado e, quando um jogador é gerado, para que o dispositivo de acionamento reaja:
~~~(verse)
my_device := class
@editable PlayerSpawn : player_spawner_device = player_spawner_device{}
@editable Trigger : trigger_device = trigger_device{}
OnBegin
OnPlayerSpawned(Player : player) : void = set SavedPlayer = option{Player} if (TriggerPlayer := SavedPlayer?): Trigger.Trigger(TriggerPlayer)
Tipo persistente
Uma opção é persistente se seu valor for persistente, ou seja, você pode usá-la nas variáveis weak_map com escopo de módulo e fazer com que seus valores persistam entre as sessões de jogo. Consulte mais detalhes sobre a persistência em Verse em: Como usar dados persistentes em Verse.